【问题标题】:Set of mutex pointers互斥指针集
【发布时间】:2019-04-04 10:35:32
【问题描述】:

我正在尝试将几个互斥体(指针)存储到一个集合中。

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

addLock(const std::mutex* lock)
{
  mutex_set.insert(lock)
}

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

【问题讨论】:

  • 请详细说明它是如何“不工作”的。这可能与lock 的类型为const std::mutex* 而集合存储std::mutex* 有关吗?
  • 我仍然在尝试理解 const mutex 指针的无用之处。
  • 可能是指向非 const 互斥体的 const 指针。
  • 不可能有std::set&lt;std::mutex&gt; 吗?什么不工作?
  • 为什么要将它们存储在set 中?为了避免在容器中有两次相同的互斥锁?套装有什么用?除了锁定集合中的所有互斥体(否则你怎么知道要锁定哪个?)之外,我几乎无法想象一个用例,这相当于只有一个互斥体。

标签: c++ multithreading c++11 pointers mutex


【解决方案1】:

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

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

void addLock(std::mutex* lock)
{
  mutex_set.insert(lock);
}

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

【讨论】:

    猜你喜欢
    • 2021-08-19
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    相关资源
    最近更新 更多