生產者消費者問題

2021-10-06 16:15:41 字數 2616 閱讀 2491

生產者消費者共享緩衝區,生產者向緩衝區中放資料,消費者從緩衝取中取資料,當緩衝區中被放滿時,生產者程序就必須進入掛起狀態,直到消費者從緩衝中取走資料時,生產者才能繼續向緩衝區中存放資料,同樣當緩衝取中沒有資料時,消費者程序就必須進入掛起休眠狀態,直到生產者向緩衝區中放入資料時,消費者才能被喚醒繼續從緩衝區中取走資料。

因為有單生產者和單消費者,致使在乙個緩衝區滿時生產者需要等待消費,乙個緩衝區空時消費者也要等待生產。

利用兩個pthread庫中的互斥鎖

先定義初始化,利用靜態賦值法,以及定義兩個互斥鎖;

pthread_mutex_t mutex = pthread_mutex_initializer;

pthread_t thread[2]

;pthread_mutex_t mut;

pthread_mutex_t mut2;

先定義全域性變數,producer用的time1,consumer用的time2,以及大小為20的緩衝區,以及乙個函式t;

#include

#include

int buffer[20]

,t =

0,time1 =

0,time2 =

0;

分為兩個函式,乙個是生產者的函式;

先判斷是否已滿,滿則加鎖;

void

producer()

輸出生產者置於多少,增加迴圈引數,並且解鎖。

最後函式為:

void

producer()

printf

("生產者位於%d\n"

, time1)

; t++

; time1++

;pthread_mutex_unlock

(&mut2);}

}

再進行消費者函式;

void

consumer()

printf

("消費者得到%d\n"

, time2)

; t--

; time2;

pthread_mutex_unlock

(&mut);}

}

最後加入主函式;

int

main()

先進行頭檔案和巨集定義

//semaphores

#include

#include

#include

#include

#include

#include

#include

#include

#define buffer_size 5

定義semaphore記錄有多少個執行緒正在使用

sem_t empty, full, mutex;
定義緩衝區

int buffer[buffer_size]

;int in, out;

定義儲存資料的結構體

struct data 

;

定義有限輸入

int

insert_item

(buffer_item item)

定義有限刪除

int

remove_item

(buffer_item *item)

接下來是生產者部分的函式

先定義生產者id,始末次數,總id

void

*producer

(void

* param)

然後是消費者的函式

void

*consumer

(void

* param)

最後進行主函式

定義執行緒識別符號,線成屬性

int

main()

else

if(role ==

'c')

pthread_create

(&tid,

&attr, consumer, d)

;}

最後釋放訊號量

sem_destroy

(&mutex)

;sem_destroy

(&empty)

;sem_destroy

(&full)

;return0;

}sem_destroy

(&mutex)

;sem_destroy

(&empty)

;sem_destroy

(&full)

;return0;

}

生產者消費者問題

public class producer consumer class godown public godown int num public synchronized void produce int n catch interruptedexception e curr num n syste...

生產者 消費者問題

在學習程序互斥中,有個著名的問題 生產者 消費者問題。這個問題是乙個標準的 著名的同時性程式設計問題的集合 乙個有限緩衝區和兩類執行緒,它們是生產者和消費者,生產者把產品放入緩衝區,相反消費者便是從緩衝區中拿走產品。生產者在緩衝區滿時必須等待,直到緩衝區有空間才繼續生產。消費者在緩衝區空時必 須等待...

生產者 消費者問題

1 程序互斥問題 緩衝區b是臨界資源,程序p和c不能同時對b進行操作,即只能互斥的操作 2 程序同步問題 p不能往 滿 的的緩衝區b放產品,c不能從空的緩衝區獲得產品。當緩衝區滿時,c必須先於p執行,當緩衝區空時,p必須先於c執行 我們給出如下基於記錄型 二元 訊號量機制的解法 10 9 2013 ...