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

2021-08-20 07:12:45 字數 2249 閱讀 7999

實驗目的

①實現生產者—消費者問題的模擬,以便更好的理解此經典程序同步問題。生產者-消費者問題是典型的pv操作問題,假設系統中有乙個比較大的緩衝池,生產者的任務是只要緩衝池未滿就可以將生產出的產品放入其中,而消費者的任務是只要緩衝池未空就可以從緩衝池中拿走產品。緩衝池被占用時,任何程序都不能訪問。

②每乙個生產者都要把自己生產的產品放入緩衝池,每個消費者從緩衝池中取走產品消費。在這種情況下,生產者消費者程序同步,因為只有通過互通訊息才知道是否能存入產品或者取走產品。他們之間也存在互斥,即生產者消費者必須互斥訪問緩衝池,即不能有兩個以上的程序同時進行。

實驗原理

在同乙個程序位址空間內執行兩個執行緒。生產者執行緒生產物品,然後將物品放置在乙個空緩衝區中供消費者執行緒消費。消費者執行緒從緩衝區中獲得物品,然後釋放緩衝區。當生產者執行緒生產物品時,如果沒有空緩衝區可用,那麼生產者執行緒必須等待消費者執行緒釋放乙個空緩衝區。當消費者執行緒消費物品時,如果沒有滿的緩衝區,那麼消費者執行緒將被阻擋,直到新的物品被生產出來。

生產者流程圖

消費者流程圖

注意點

①本次實驗是關於生產者與消費者之間互斥和同步的問題。問題的是指是p、v操作,實驗設乙個共享緩衝區,生產者和消費者互斥的使用,當乙個執行緒使用緩衝區的時候,另乙個讓其等待直到前乙個執行緒釋放緩衝區為止。

②生產者與消費者是乙個與現實有關的經驗問題,通過此原理舉一反三可以解決其他類似的問題。 通過本實驗設計,我們對作業系統的p、v進一步的認識,深入的了解p、v操作的實質和其重要性。課本的理論知識進一步闡述了現實中的實際問題。

③linux環境下編寫變異c語言有windows稍有不同,注意在linux中編譯帶有執行緒

#include 

#include

#include

#define n 100

#define true 1

#define producernum 10

#define consumernum 5

#define sleeptime 1000

typedef int semaphore;

typedef int item;

item buffer[n] = ;

intin = 0;

intout = 0;

int procount = 0;

semaphore mutex = 1, empty = n, full = 0, procmutex = 1;

void * producer(void * a)

empty--;

while(mutex <= 0);

mutex--;

buffer[in] = procount;

in = (in + 1) % n;

mutex++;

full++;

sleep(sleeptime);

}}void * consumer(void *b)

full--;

while(mutex <= 0);

mutex--;

int nextc = buffer[out];

buffer[out] = 0;//消費完將緩衝區設定為0

out = (out + 1) % n;

mutex++;

empty++;

printf("\t\t\t\t消費乙個產品id%d,緩衝區位置為%d\n", nextc,out);

sleep(sleeptime);

}}int main()

threadpool[i] = temp;

}//建立生產者程序放入執行緒池

for(i = 0; i < consumernum; i++)

threadpool[i+producernum] = temp;

}//建立消費者程序放入執行緒池

void * result;

for(i = 0; i < producernum+consumernum; i++)

}//執行執行緒池

return

0;}

c語言實現生產者與消費者

問題描述 有多個程序 多個生產者程序和多個消費者程序共享乙個初始為空 固定大小為n的快取 緩衝區 生產者的工作是製造資料,只有緩衝區沒滿時,生產者才能把訊息放入到緩衝區,否則必須等待 同時,只有緩衝區不空時,消費者才能從中取出訊息,一次消費一段資料 即將其從快取中移出 否則必須等待。由於緩衝區是臨界...

Go語言實現生產者消費者問題

某個模組負責產生資料,這些資料由另乙個模組來負責處理 此處的模組是廣義的,可以是類 函式 執行緒 程序等 產生資料的模組,就形象地稱為生產者 而處理資料的模組,就稱為消費者。單單抽象出生產者和消費者,還夠不上是生產者 消費者模式。該模式還需要有乙個緩衝區處於生產者和消費者之間,作為乙個中介。生產者把...

生產者消費者 生產者與消費者模式

一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...