1. 程式人生 > >C++實現生產者消費者

C++實現生產者消費者

#include <condition_variable>
#include <mutex>
#include <thread>
#include <iostream>
#include <queue>
#include <chrono>

int main()
{
    // 生產者數量
    std::queue<int> produced_nums;
    // 互斥鎖
    std::mutex m;
    // 條件變數
    std::condition_variable cond_var;
    // 結束標誌
bool done = false; // 通知標誌 bool notified = false; // 生產者執行緒 std::thread producer([&]() { for (int i = 0; i < 5; ++i) { std::this_thread::sleep_for(std::chrono::seconds(1)); // 建立互斥鎖 std::unique_lock<std::mutex> lock(m); std
::cout << "producing " << i << '\n'; produced_nums.push(i); notified = true; // 通知一個執行緒 cond_var.notify_one(); } done = true; cond_var.notify_one(); }); // 消費者執行緒 std::thread consumer([&]() { std
::unique_lock<std::mutex> lock(m); while (!done) { while (!notified) { // 迴圈避免虛假喚醒 cond_var.wait(lock); } while (!produced_nums.empty()) { std::cout << "consuming " << produced_nums.front() << '\n'; produced_nums.pop(); } notified = false; } }); producer.join(); consumer.join(); }

相關推薦

Linux C 實現生產者消費者問題

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

C++實現生產者消費者

#include <condition_variable> #include <mutex> #include <thread> #include <iostr

C++11實現生產者消費者模式

併發程式設計中,資料產生和資料處理在不同的執行緒,這些執行緒傳遞資料常用的就是生產者消費者模式 以下是模仿Java的BlockingQueue實現的生產者消費者模式: #pragma once

C語言實現生產者-消費者問題

#include "windows.h"#include "conio.h"#include "stdio.h"#include "time.h" #define MAX 20    int count;     void Proclucer(){ int k,a=0; while(1) {  if(

Linux C:利用兩個執行緒實現生產者消費者模型

在使用執行緒實現消費者生產者模型前,簡單介紹一下執行緒的概念。 執行緒是程序的一個實體,對於程序而言,程序是程式資源分配的最小單元,這在之前提及過;而對於執行緒,它是程式執行的最小單元,即CPU排程和分派的基本單位,它附屬於程序,同樣也能獨立執行。關於資源分配上,執行緒基本

linux下C語言實現生產者消費者問題

問題描述: 緩衝區大小為N,生產者產生物品放到緩衝區,消費者將物品從緩衝區移走 互斥關係: 對緩衝區得訪問需要互斥,包括生產者和生產者之間、消費者和消費者之間、生產者和消費者之間。 同步關係:

使用管程實現生產者消費者模式

dex .com 完成 ble override date 有用 mut 生產者消費者模式 生產者消費者模式是一種常見的設計模式,掌握一種完美,穩定的實現方式非常有用,下面我就使用misa管程實現生產者消費者模式。 這種實現的優點: 1.穩定,不會出現死鎖現象 2.運行速度

Queue 實現生產者消費者模型

pri join() imp 等待 tar 構造函數 nowait import 長度 Python中,隊列是線程間最常用的交換數據的形式。 Python Queue模塊有三種隊列及構造函數: 1、Python Queue模塊的FIFO隊列先進先出。 class Queue

用Python多線程實現生產者消費者模式爬取鬥圖網的表情圖片

Python什麽是生產者消費者模式 某些模塊負責生產數據,這些數據由其他模塊來負責處理(此處的模塊可能是:函數、線程、進程等)。產生數據的模塊稱為生產者,而處理數據的模塊稱為消費者。在生產者與消費者之間的緩沖區稱之為倉庫。生產者負責往倉庫運輸商品,而消費者負責從倉庫裏取出商品,這就構成了生產者消費者模式。 生

python 歸納 (十四)_隊列Queue實現生產者消費者

() producer put consumer 啟動 produce odin gin and # -*- coding: UTF-8 -*- """ 多線程的生產者,消費者 使用隊列Queue """ import Queue import thre

多線程實現生產者消費者

sum sel item __main__ sleep port start per read 1 import threading 2 import random 3 import queue 4 import time 5 6 7 class Pro

Java實現生產者消費者模式的兩種方法

1、 利用 Object的 wait/notify,和非阻塞佇列實現 import java.util.PriorityQueue; public class Test{ private int size=10; private PriorityQueue&

OS:(Linux)多執行緒實現生產者-消費者問題--pthread庫

OS實驗——多執行緒實現生產者-消費者問題時,正確輸入程式碼生成檔案pthread.c,在終端執行: gcc編譯:輸入gcc -o pthread pthread.c 無法成功編譯,錯誤提示如下:   CSDN查詢解決方案後,發現pthread庫並不是Linux系統預設的庫,連結時需要使

java併發之----實現生產者/消費者模式(操作值&一對一交替列印)

一、實現生產者/消費者模式 1、一生產與一消費:操作值 利用synchronized 實現,程式碼如下: public class Producer { private String lock; public Producer(String lock){ this.loc

使用LinkedBlockingQueue來實現生產者消費者的例子

工作中,經常有將檔案中的資料匯入資料庫的表中,或者將資料庫表中的記錄儲存到檔案中。為了提高程式的處理速度,可以設定讀執行緒和寫執行緒,這些執行緒通過訊息佇列進行資料互動。本例就是使用了LinkedBlockingQueue來模仿生產者執行緒和消費者執行緒進行資料生產和消費。

python併發程式設計-管道實現生產者消費者模型

from multiprocessing import Lock,Pipe,Process def producer(con,pro,name,food): con.close() for i in range(100): f = '%s生產%s%s'%(

使用Condition實現生產者消費者

使用Condtion實現生產者消費者可以精確控制喚醒生產者還是消費者執行緒 與synchronized的等待喚醒機制相比Condition具有更多的靈活性以及精確性,這是因為notify()在喚醒執行緒時是隨機(同一個鎖),而Condition則可通過多個Condition

【作業系統實驗】python程式碼模擬實現生產者消費者模式

相比C/C++指標的折磨,本人更喜歡python程式碼的簡潔,廢話不多說: from multiprocessing import Process, JoinableQueue import time,

Java多執行緒-----實現生產者消費者模式的幾種方式

   1 生產者消費者模式概述      生產者消費者模式就是通過一個容器來解決生產者和消費者的強耦合問題。生產者和消費者彼此之間不直接通訊,而通過阻塞佇列來進行通訊,所以生產者生產完資料之後不用等待消費者處理, 直接扔給阻塞佇列,消費者不找生產者要資料,

Queue和BlockingQueue的使用以及使用BlockingQueue實現生產者-消費者

  Java提供了兩種新的容器型別:Queue和BlockingQueue。   Queue用於儲存一組等待處理的元素。它提供了幾種實現,包括:ConcurrentLinkedQueue,這是一個先進先出的對列,以及PriorityQueue,這是一個非併發的優先佇列。Queue上的操作不會阻塞,如果佇列為