Я пытаюсь сохранить в наборе несколько мьютексов (указателей).
std::set<std::mutex*> mutex_set;
addLock(const std::mutex* lock)
{
mutex_set.insert(lock)
}
Поскольку это не работает, я пробовал средства защиты и уникальные указатели, но безуспешно. Как лучше всего хранить мьютекс в наборе?
Я все еще пытаюсь понять бесполезность константного указателя мьютекса.
Вероятно, это был константный указатель на неконстантный мьютекс.
разве нельзя иметь std::set<std::mutex>
? Что не работает?
почему вы вообще хотите хранить их в set
? Чтобы избежать двойного размещения одного и того же мьютекса в контейнере? Какая польза от набора? Я с трудом могу представить другой вариант использования, кроме блокировки всех мьютексов в наборе (иначе как узнать, какой из них заблокировать?), Который был бы своего рода эквивалентом наличия только одного мьютекса.
Вероятно, ваша проблема вызвана const
. Код, который компилируется:
std::set<std::mutex*> mutex_set;
void addLock(std::mutex* lock)
{
mutex_set.insert(lock);
}
Вы также можете подумать о том, чтобы избегать использования необработанных указателей - поскольку семантика владения отсутствует (т.е. кто владеет и может удалить объект, на который указывает объект - в данном случае мьютекс).
Пожалуйста, поясните, почему это «не работает». Возможно, это связано с тем, что тип
lock
являетсяconst std::mutex*
, в то время как набор хранитstd::mutex*
?