最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實現(xiàn)簡單的生產(chǎn)者-消費者隊列詳解

 更新時間:2023年04月28日 08:29:19   作者:二次元攻城獅  
這篇文章主要為大家詳細介紹了如何利用C++實現(xiàn)一個簡單的生產(chǎn)者-消費者隊列,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下

本文的代碼都是ChatGPT生成,我只是做了微小的調(diào)整和整合,AI提示詞如下:

設(shè)計一個C++類,支持生產(chǎn)者-消費者模型,可以通過size函數(shù)獲取剩余數(shù)量

可能第一次生成的不一定合適,多刷新幾次。

生成的ProducerConsumerQueue.h代碼如下:

#ifndef PRODUCER_CONSUMER_QUEUE_H
#define PRODUCER_CONSUMER_QUEUE_H

#include <queue>
#include <mutex>
#include <condition_variable>

template<typename T>
class ProducerConsumerQueue {
public:
    ProducerConsumerQueue(int size) : m_maxSize(size), m_curSize(0) {}

    void push(T& val) {
        std::unique_lock<std::mutex> lock(m_mutex);
        while (m_curSize >= m_maxSize) {
            m_notFull.wait(lock);
        }
        m_queue.push(val);
        ++m_curSize;
        m_notEmpty.notify_one();
    }

    T pop() {
        std::unique_lock<std::mutex> lock(m_mutex);
        while (m_curSize <= 0) {
            m_notEmpty.wait(lock);
        }
        T val = m_queue.front();
        m_queue.pop();
        --m_curSize;
        m_notFull.notify_one();
        return val;
    }

    int size() {
        std::unique_lock<std::mutex> lock(m_mutex);
        return m_curSize;
    }

private:
    std::queue<T> m_queue;
    int m_maxSize;
    int m_curSize;
    std::mutex m_mutex;
    std::condition_variable m_notEmpty;
    std::condition_variable m_notFull;
};

#endif //PRODUCER_CONSUMER_QUEUE_H

在上面的代碼中,我們定義了一個ProducerConsumerQueue類:

  • ProducerConsumerQueue類有最大容量和當(dāng)前容量兩個屬性,使用std::queue<int>存儲數(shù)據(jù),使用std::mutex保證線程安全,使用std::condition_variable實現(xiàn)線程同步。
  • 在push函數(shù)中,如果當(dāng)前容量已滿,等待消費者消費;否則插入數(shù)據(jù),當(dāng)前容量加1,通知消費者。
  • 在pop函數(shù)中,如果當(dāng)前容量為0,等待生產(chǎn)者生產(chǎn);否則取出數(shù)據(jù),當(dāng)前容量減1,通知生產(chǎn)者。
  • 在size函數(shù)中,使用std::unique_lockstd::mutex保證線程安全,獲取當(dāng)前容量并返回。

測試示例代碼如下:

#include <iostream>
#include "ProducerConsumerQueue.h"
int main() {
    ProducerConsumerQueue<int> queue(2);
    // 生產(chǎn)者線程
    std::thread producer([&queue] {
        for (int i = 0; i < 10; ++i) {
            queue.push(i);
        }
        });
    // 消費者線程
    std::thread consumer([&queue] {
        for (int i = 0; i < 10; ++i) {
            int value = queue.pop();
            std::cout << "Consumed " << value << std::endl;
            std::cout << queue.size() << std::endl;
        }
        });
    producer.join();
    consumer.join();
}

到此這篇關(guān)于C++實現(xiàn)簡單的生產(chǎn)者-消費者隊列詳解的文章就介紹到這了,更多相關(guān)C++生產(chǎn)者消費者隊列內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++多線程之互斥鎖與死鎖

    C++多線程之互斥鎖與死鎖

    互斥鎖和死鎖是C++多線程中常見的情況,這篇文章就帶大家進一步了解多線程中的互斥鎖與死鎖這兩個概念,文中的示例代碼介紹得很詳細,快來跟隨小編一起學(xué)習(xí)吧
    2021-12-12
  • C++事件處理中的__hook與__unhook用法詳解

    C++事件處理中的__hook與__unhook用法詳解

    這篇文章主要介紹了C++事件處理中__hook與__unhook的用法,C++中的COM類主要支持事件處理,需要的朋友可以參考下
    2016-01-01
  • C語言 以字符形式讀寫文件詳解及示例代碼

    C語言 以字符形式讀寫文件詳解及示例代碼

    本文主要介紹C語言 以字符形式讀寫文件,這里整理了讀寫文件的一些資料并附示例代碼,供大家學(xué)習(xí)參考,有需要的小伙伴可以參考下
    2016-08-08
  • epoll多路復(fù)用的一個實例程序(C實現(xiàn))

    epoll多路復(fù)用的一個實例程序(C實現(xiàn))

    這篇文章主要為大家詳細介紹了epoll多路復(fù)用的一個實例程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++繼承詳細介紹

    C++繼承詳細介紹

    我們都知道面向?qū)ο笳Z言的三大特點是:**封裝,繼承,多態(tài)。**之前在類和對象部分,我們提到了C++中的封裝,那么今天呢,我們來學(xué)習(xí)一下C++中的繼承
    2022-10-10
  • 基于C++實現(xiàn)BMI身體質(zhì)量指數(shù)計算工具

    基于C++實現(xiàn)BMI身體質(zhì)量指數(shù)計算工具

    BMI(Body?Mass?Index,身體質(zhì)量指數(shù)),也稱為體重指數(shù),是一種常用的衡量成人人體肥胖程度的指標(biāo),本文就來用C++編寫一個簡單的BMI計算工具吧
    2023-10-10
  • C++運算符重載規(guī)則詳解

    C++運算符重載規(guī)則詳解

    這篇文章主要介紹了C++運算符重載規(guī)則詳解,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • C++用easyx圖形庫實現(xiàn)障礙跑酷小游戲

    C++用easyx圖形庫實現(xiàn)障礙跑酷小游戲

    這篇文章主要為大家詳細介紹了C++用easyx圖形庫實現(xiàn)障礙跑酷小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • VC運用OPENGL加載BMP紋理圖的實現(xiàn)方法匯總

    VC運用OPENGL加載BMP紋理圖的實現(xiàn)方法匯總

    這篇文章主要介紹了VC運用OPENGL加載BMP紋理圖的實現(xiàn)方法,對于更好的了解OpenGL很有幫助,需要的朋友可以參考下
    2014-07-07
  • C++ OpenCV實戰(zhàn)之標(biāo)記點檢測的實現(xiàn)

    C++ OpenCV實戰(zhàn)之標(biāo)記點檢測的實現(xiàn)

    這篇文章主要介紹了如何利用C++ OpenCV實現(xiàn)關(guān)鍵點的檢測,文中的示例代碼講解詳細,對我們學(xué)習(xí)OpenCV有一定幫助,感興趣的小伙伴可以了解一下
    2022-03-03

最新評論

汪清县| 凤翔县| 巴林右旗| 左贡县| 香港| 水城县| 林周县| 浮梁县| 新巴尔虎右旗| 广德县| 临汾市| 武鸣县| 都安| 济南市| 清苑县| 宁波市| 茶陵县| 西昌市| 日喀则市| 永丰县| 昌吉市| 新乐市| 安吉县| 长宁区| 新泰市| 成武县| 卓尼县| 吉隆县| 晋宁县| 紫阳县| 景洪市| 鄂尔多斯市| 永顺县| 凉城县| 合阳县| 林州市| 黄骅市| 汉源县| 固阳县| 邵阳县| 广安市|