c++ - 需要一个可调整大小的容器来存储 std::mutex

标签 c++ vector containers mutex

我需要能够在任何给定时间存储“n”个互斥体。

这些网址与我的问题直接相关 storing mutexes in a vector/deque c++ How can I use something like std::vector<std::mutex>?

我相信我理解为什么互斥体不能存储在可能需要移动它们的容器中(因为互斥体无法移动)。我的问题是,自从这些文章发布以来,c/c++ 是否有任何我可能无法利用但我不知道的进展?

一个简单的数组会很好,但由于明显的原因而无法工作。 vector 或类似的东西可以工作,除了互斥体无法移动并因此产生编译器错误这一事实之外。以下确实有效,但似乎受到一些人的谴责。是否有编程原因导致不应使用以下代码示例来解决问题?

std::vector<std::timed_mutex*> myMutexes;
myMutexes.push_back(new std::timed_mutex());

最佳答案

从链接页面,

If you need to add non-movable items to the end of a sequence, switch to deque, that will work where vector won't.

如果您需要既不在开头也不在结尾的插入或删除,那么当然 std::deque也不起作用,你需要使用类似 std::vector<std::unique_ptr<std::mutex>> 的东西。这比使用原始指针更好,因为它保证当互斥体从 vector 中删除或 vector 超出范围时(程序异常终止的情况除外),互斥体将被释放。

关于c++ - 需要一个可调整大小的容器来存储 std::mutex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57257926/

相关文章:

c++ - 模板版和非模板版功能相同

c++ - 错误 : C2248: 'QGraphicsItem::QGraphicsItem' : cannot access private member declared in class 'QGraphicsItem'

C++如何将 map 复制到 vector

c++ - 当数据结构是模板参数时,如何判断操作是否会使迭代器无效?

c++ - std::function 和 std::variant 相互引用

c++ - 为给定窗口遍历 MSAA 树的代码(Microsoft Active Accessibility)?在 C/C++ 中

c++ - 在 std::vector 上调整大小不调用 move 构造函数

r - 如何使用 for 循环创建向量

unity-container - UnityContainer : Conditional Logic upon resolving