我有一个 ( std::)queue / (std::)deque由一个线程推送并由另一个线程弹出。所以我知道我必须在 push 和 pop 函数上锁定一个互斥锁,因为它们正在修改队列,但是如果我访问 front(),我是否也必须锁定一个互斥锁?
我问的原因是,我真的不知道队列是如何在内部组织的。我读过一些它正在按时分配/删除的东西。所以如果我在另一个线程正在推动的同时阅读前面,是否有可能移动前面?
那么迭代器呢?当迭代器读取值时,我是否还必须锁定互斥锁?
我认为在阅读时锁定互斥锁总是一个好主意,但我不确定是否真的需要在每个迭代器/前端访问上锁定整个 queue.mutex。如果每次都锁定它可能会减慢整个程序。