簡體   English   中英

具有2個線程的C ++隊列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM