欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

測試示例代碼如下:

#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++實現(xiàn)LeetCode(18.四數(shù)之和)

    C++實現(xiàn)LeetCode(18.四數(shù)之和)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(18.四數(shù)之和),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++拷貝構(gòu)造函數(shù)中的陷阱

    C++拷貝構(gòu)造函數(shù)中的陷阱

    這篇文章主要介紹了C++拷貝構(gòu)造函數(shù)中的陷阱,拷貝構(gòu)造函數(shù)大家都比較熟悉,通俗講就是傳入一個對象,拷貝一份副本。不過看似簡單的東西,實際不注意的話就會產(chǎn)生問題,下面我們就來看看C++拷貝構(gòu)造函數(shù)中都有哪些陷阱吧
    2022-01-01
  • C語言實現(xiàn)簡單的貪吃蛇游戲的示例代碼

    C語言實現(xiàn)簡單的貪吃蛇游戲的示例代碼

    這篇文章主要為大家詳細介紹了C語言如何實現(xiàn)經(jīng)典貪吃蛇游戲,文中的示例代碼講解詳細,對我們學(xué)習C語言有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-01-01
  • 使用UDP協(xié)議實現(xiàn)單詞翻譯服務(wù)器

    使用UDP協(xié)議實現(xiàn)單詞翻譯服務(wù)器

    這篇文章主要為大家詳細介紹了如何使用UDP協(xié)議實現(xiàn)英文單詞翻譯服務(wù)器,文中的示例代碼講解詳細,具有一定的學(xué)習價值,感興趣的小伙伴可以了解下
    2023-08-08
  • C++類和對象到底是什么

    C++類和對象到底是什么

    C++ 是一門面向?qū)ο蟮木幊陶Z言,理解 C++,首先要理解類(Class)和對象(Object)這兩個概念。下面和小編一起來學(xué)習吧
    2021-09-09
  • C++實現(xiàn)校園導(dǎo)游系統(tǒng)

    C++實現(xiàn)校園導(dǎo)游系統(tǒng)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)校園導(dǎo)游系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語言求逆矩陣案例詳解

    C語言求逆矩陣案例詳解

    這篇文章主要介紹了C語言求逆矩陣案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • c++ string的erase刪除方法

    c++ string的erase刪除方法

    這篇文章主要介紹了c++ string的erase刪除方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • C++高性能服務(wù)器框架之協(xié)程調(diào)度模塊

    C++高性能服務(wù)器框架之協(xié)程調(diào)度模塊

    這篇文章主要介紹了C++高性能服務(wù)器框架中的協(xié)程調(diào)度模塊,文中通過代碼示例介紹的非常詳細,對我們的學(xué)習或工作有一定的幫助,需要的朋友可以參考下
    2023-06-06
  • Qt中樹形控件Tree Widget的使用方法匯總

    Qt中樹形控件Tree Widget的使用方法匯總

    最近小編在研究Tree Widget樹形控件的相關(guān)知識,這種控件其實有時還是很有用處的,我主要利用的是帶有復(fù)選框的樹形控件,下面通過實例代碼給大家介紹下Qt中樹形控件Tree Widget的一些使用方法,感興趣的朋友一起學(xué)習吧
    2021-11-11

最新評論