我正在使用隊列在線程之間進行通信。我有一個閱讀器和多個寫入器線程。我的問題是,當我使用閱讀器隊列中的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