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 每個消費者程序...