C語言實現生產者消費者程序同步問題?

時間 2025-04-07 05:15:29

1樓:網友

你要是c語言是沒有semophore &這種語法的,這是c++的語法。

在linux下用c語言實現用多程序同步方法演示「生產者-消費者」問題

2樓:風若遠去何人留

這個問題需要的知識主要包括:

1 多程序間進行通訊;

2 使用同步訊號量(semaphore)和互斥訊號量(mutex)進行資料保護。

#include

#include

#include

#include

#include

#define n 2 // 消費者或者生產者的數目。

#define m 10 // 緩衝數目。

int in = 0; // 生產者放置產品的位置。

int out = 0; // 消費者取產品的位置。

int buff[m] = ; // 緩衝初始化為0, 開始時沒有產品。

sem_t empty_sem; // 同步訊號量, 當滿了時阻止生產者放產品。

sem_t full_sem; // 同步訊號量, 當沒產品時阻止消費者消費。

pthread_mutex_t mutex; // 互斥訊號量, 一次只有乙個執行緒訪問緩衝。

int product_id = 0; //生產者id

int prochase_id = 0; //消費者id

列印緩衝情況 */

void print()

生產者方法 */

void *product()

* 消費者方法 */

void *prochase()

int main()

初始化互斥訊號量。

if(ini3 != 0)

建立n個生產者執行緒。

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

/建立n個消費者執行緒。

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

/銷燬執行緒。

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

exit(0);

在linux下編譯的時候,要在編譯命令中加入選項-lpthread以包含多執行緒支援。比如儲存的c檔案為,要生成的可執行檔案為demo。可以使用命令:

gcc -o demo -lpthread

程式中為便於觀察,使用了sleep(1);來暫停執行,所以檢視輸出的時候可以看到,輸出是每秒列印一次的。

3樓:網友

自己稍微改改。

#include

#include

char data[5];//倉庫,用於存放charint size = 0;//庫存數。

pthread_mutex_t mutex = pthread_mutex_initializer;

pthread_cond_t full = pthread_cond_initializer;

pthread_cond_t empty = pthread_cond_initializer;

void print(){

int i;

for(i=0;i

什麼是消費者關係,生產者和消費者之間的關係是什麼

所謂消費者關係是指企業與其產品和服務的現實的和潛在的消費者之間所結成的社會聯絡。消費者關係是現代企業公共關係的重要組成部分,其特定的含義是指企業與其產品和服務的現實的 潛在的消費者之間所結成的社會聯絡。消費者關係是組織外部公共關係中最重要的一類。因為一般說來,組織自身目標的最終實現與否就直接取決於它...

硝化細菌是生產者還是消費者

是生產者,它把硝酸根離子轉化為硝酸.硝化細菌 包括兩個細菌亞群,一類是亞硝酸細菌 又稱氨氧化菌 將氨氧化成亞硝酸,另一類是硝酸細菌 又稱硝化細菌 將亞硝酸氧化成硝酸。這兩類菌能分別從以上氧化過程中獲得生長所需要的能量,但其能量利用率不高,故生長較緩慢,其平均代時 即細菌繁殖一代所需要的時間 在10小...

個人消費者市場和生產者市場細分的區別

根據你的問題,先做一下名詞解釋 個人消費者市場 是指個人客戶所能夠在一定時間範圍內消費掉相關產品的生產數量 以及銷售 金額。生產者市場 是指製造相關產品或服務的企業或服務商數量。前者指的是需要產品的數量和需要支出的資金數量 後者指的是能夠生產相應產品的製造企業數量。回答消費者市場與生產者市場 又叫做...