让我在队列前端访问时锁定互斥对象
have i to lock mutex on queue front access
我有一个(std::(队列/(std::。所以我知道我必须在push和pop函数上锁定互斥体,因为它们正在修改队列,但如果我访问front((,我是否也必须锁定互斥体?
我之所以这么问,是因为我真的不知道队列内部是如何组织的。我读到一些东西,它是分配/删除的时间,它是需要的。因此,如果我在另一个线程推动的同时读取前面,有可能前面被移动了吗?
迭代器怎么样迭代器读取值时,我是否也必须锁定互斥对象
我认为在读取时锁定互斥总是一个好主意,但我不确定是否真的需要在每次迭代器/前端访问时锁定整个queue.mutex。如果每次都锁定,可能会减慢整个程序的速度。
std::queue
只是一个适配器,它在内部使用std::deque
或std::list
。
您不仅可以在读取时锁定队列,还可以等待条件变量并检查是否有可用的数据。如果你有这个设置
std::queue<int> q;
std::mutex m;
std::condition_variable cv;
然后您可以等待其他线程提供数据
std::unique_lock<std::mutex> guard(m);
while(q.empty())
cv.wait(guard);
int n = q.front();
q.pop();
当数据可用时,将通知
cv.notify_one();
例如。
相关文章:
- 当只有一个线程主要使用该对象而其他线程很少使用它时,如何最小化该对象的互斥锁锁定?
- 在任何地方对C++中所有并行线程中的所有锁定和解锁实例使用相同的 std::mutex 和 lock 对象
- 在锁定下清除STD ::映射,而移动到临时对象
- C 删除对象,是否锁定
- 某人如何在一个线程中锁定多个对象
- 同时锁定两个互斥对象
- 如何在同一个线程上用同一个互斥对象锁定两次
- 如果其对象在多个线程中运行,我们是否需要锁定类成员功能
- C++11线程挂起锁定互斥对象
- 何时使用c++类锁定互斥对象
- C++,有没有办法锁定对象本身
- C++(可能还有 Java)如何锁定对象以进行同步
- 像 C# 一样在 Qt 中锁定对象
- 通过私有互斥锁锁定对象的最佳方法是什么
- 在linux上的C/C++中,我如何创建一个预锁定的互斥对象
- 如何为多线程访问实现类锁定对象
- 检查线程在锁定之前是否已经锁定了互斥对象
- 为什么condition_variable没有等待函数,它不重新锁定互斥对象
- 如果一个堆叠的协同程序锁定了一个互斥对象,然后就屈服了,该怎么办
- 锁定shared_ptr对象