生產者消費者問題C 實現

2021-10-24 15:54:59 字數 1657 閱讀 7749

2020/10/11 11:23

設計c/c++程式(可以嵌入組合語言),以忙等待方式實現訊號量及其p、v操作。利用你實現的訊號量,實現生產者-消費者問題。給出實現方法、主要源**和測試結果。

# include

# include

# include

# include

# include

# include

#include

#include

using

namespace std;

# define product_size 5

//生產者數量

# define customer_size 20

//消費者數量

#define max_size 10

//最大產品數量

mutex mut;

//互斥鎖

condition_variable con;

//條件變數

queue<

int> que;

//佇列,模擬緩衝區

void

producter()

int data =

rand()

;//隨機產生數字代表商品的生產

que.

push

(data)

;//將資料推入佇列代表商品加入緩衝區

cout << this_thread::

get_id()

<<

"生產了產品:"

<< data << endl;

sleep

(500);

con.

notify_all()

;//喚醒所有等待的程序,即v操作}}

void

customer()

cout << this_thread::

get_id()

<<

"消費了產品:"

<< que.

front()

<< endl;

sleep

(500);

que.

pop();

con.

notify_all()

;//喚醒所有等待的程序,即v操作}}

1.利用條件變數condition_variable實現pv操作,當condition_variable物件的某個wait 函式被呼叫的時候,它使用 unique_lock(通過 mutex) 來鎖住當前執行緒。當前執行緒會一直被阻塞,直到另外乙個執行緒在相同的condition_variable 物件上呼叫

2.用產生的隨機數字代表商品的生產,加入佇列表示加入緩衝區

3.執行緒銷毀採用join方式,等待新執行緒執行完畢再銷毀原始執行緒

C 實現「生產者消費者」問題

有時候我們做專案時不免遇到這樣乙個問題 我們需要做乙個功能,該功能需要處理來自於其他地方的資料,但是你需要保證任務需要乙個乙個循序漸進的進行,與此同時,資料 的時機不可預知,有時任務一下子來了100條,有時一下子只來了1條,你要怎樣處理這些資料,使得這些任務被執行的時候是一條一條的執行的。描述真含糊...

生產者消費者問題(C實現)

生產者消費者問題是作業系統中的乙個經典的問題。然後看了作業系統的書籍如何解決書上給的偽 是這樣的 item b k semaphore empty empty k 可以使用的空緩衝區數 semaphore full full 0 緩衝區內可以使用的產品數 semaphore mutex mutex ...

生產者 消費者問題實現

include include include include include include define need p 2 生產者程序數 define need c 2 消費者程序數 define works p 10 每個生產者程序執行的次數 define works c 10 每個消費者程序...