[英]C++ queue with 2 threads
我在我的程序中使用了生產者 - 消費者模型的隊列。 我有一個線程,它一直將數據排入隊列,一個線程不斷從隊列中出列數據。 我的問題是,在進行入隊或出隊操作時,我是否需要使用互斥鎖? 需要嗎? 如果我在生產者或消費者方面有多個線程,我認為需要互斥,但我不確定是否有必要我的情況。
我的代碼如下:
template <class T>
class myqueue {
private:
queue<T> localqueue;
boost::mutex insert;
public:
myqueue(){}
~myqueue(){}
void enqueue(T in_value) {
boost::mutex::scoped_lock insert_lock = boost::mutex::scoped_lock(
this->insert);
localqueue.push(in_value);
insert_lock.unlock();
}
是的,如果你想避免可能導致UB的競爭條件,你需要使用互斥鎖保護入隊和出隊。
A S英格爾p roduce 小號英格爾çonsumer可以做到lockfree 。 嘗試使用boost::lockfree::spsc_queue
,這是針對此場景的。
boost::lockfree::spsc_queue a wait-free single-producer/single-consumer queue (commonly known as ringbuffer)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.