我需要能够在任何给定时间存储“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 wherevector
won't.
如果您需要既不在开头也不在结尾的插入或删除,那么当然 std::deque
也不起作用,你需要使用类似 std::vector<std::unique_ptr<std::mutex>>
的东西。这比使用原始指针更好,因为它保证当互斥体从 vector 中删除或 vector 超出范围时(程序异常终止的情况除外),互斥体将被释放。
关于c++ - 需要一个可调整大小的容器来存储 std::mutex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57257926/