C++ 互斥指针集

C++ 互斥指针集,c++,multithreading,c++11,pointers,mutex,C++,Multithreading,C++11,Pointers,Mutex,我试图将多个互斥体(指针)存储到一个集合中 std::set<std::mutex*> mutex_set; addLock(const std::mutex* lock) { mutex_set.insert(lock) } std::set mutex\u set; addLock(const std::mutex*lock) { 互斥设置插入(锁定) } 由于这不起作用,我尝试了锁守卫和独特的指针,但没有任何成功。将互斥存储到一个集合中的最佳方法是什么?您的问

我试图将多个互斥体(指针)存储到一个集合中

std::set<std::mutex*> mutex_set;    

addLock(const std::mutex* lock)
{
  mutex_set.insert(lock)
}
std::set mutex\u set;
addLock(const std::mutex*lock)
{
互斥设置插入(锁定)
}

由于这不起作用,我尝试了锁守卫和独特的指针,但没有任何成功。将互斥存储到一个集合中的最佳方法是什么?

您的问题可能是由
const
引起的。编译以下内容的代码:

std::set<std::mutex*> mutex_set;    

void addLock(std::mutex* lock)
{
  mutex_set.insert(lock);
}
std::set mutex\u set;
void addLock(std::mutex*lock)
{
互斥设置插入(锁);
}

您也可以考虑避免使用原始指针——因为没有所有权语义(即谁拥有并可以删除指向对象)这种情况下的互斥体。

请详细说明它如何“不工作”。这可能与
lock
的类型有关,它是
const std::mutex*
,而set存储
std::mutex*
?我仍在试图探究const mutex指针的无用性。可能是指向非const mutex的const指针。是否不可能有
std::set
?什么不起作用?无论如何,为什么要将它们存储在
集中?为了避免容器中有两次相同的互斥?这台电视机有什么用?我很难想象除了锁定集合中的所有互斥体(否则,您如何知道要锁定哪个互斥体?)之外还有什么用例,这相当于只有一个互斥体。