我正在使用队列在线程之间进行通信。我有一个阅读器和多个写入器线程。我的问题是,当我使用阅读器队列中的push/front/pop时,是否需要锁定队列?我可以这样做以下:STL队列的线程安全
//reader threads
getLock();
get the number of elements from the queue
releaseLock();
int i = 0;
while(i < numOfElements){
queue.front();
queue.pop();
i++
}
的想法是,我想减少锁定代码和自写线程只会写入队列后面的粒度,并且只有一个单一的阅读器线。只要我得到元素的数量,那么我可以从队列中获取元素,或者我是否需要将front()
和pop()
也包含在锁中?
的C++ 0x具有原子公司提供的情况和标准执行线程安全的,在C无锁队列,所以它使程序员能够无锁的一个很好的解释(线程安全)算法,并提供标准互斥锁,但它没有任何开箱即用的功能。 – GManNickG 2010-10-27 02:32:27