生產者消費者問題是作業系統中的乙個經典的問題。
然後看了作業系統的書籍如何解決書上給的偽**是這樣的
item b[k];
semaphore empty; empty=k; //可以使用的空緩衝區數
semaphore full; full=0; //緩衝區內可以使用的產品數
semaphore mutex; mutex=1; //互斥訊號量
intin=0; //放入緩衝區指標
intout=0; //取出緩衝區指標
cobegin
process producer_i ( ) }
} }
coend
上面的注釋,和過程已經比較到位了,只是我習慣用我的方法,即把生產和消費,放入臨界區所以下面是我解決生產消費模型所用的偽**
item b[k];
semaphore empty; empty=k; //可以使用的空緩衝區數
semaphore full; full=0; //緩衝區內可以使用的產品數
semaphore mutex; mutex=1; //互斥訊號量
intin=0; //放入緩衝區指標
intout=0; //取出緩衝區指標
cobegin
process producer_i ( ) }
} }
coend
好了說了這麼多我該帖下我的**了,此**在linux環境下的多執行緒操作,用到了訊號量的。。。
#include
#include
#include
#include
#include
#include
#include
#include
#define err_exit(m) \
do \
while(0)
#define consumers_count 2 //消費者人數
#define producers_count 2 //生產者人數
#define buffsize 5
int g_buffer[buffsize]; //緩衝區數目
unsigned
short in = 0; //放入產品的指標(生產到哪個緩衝區)
unsigned
short out = 0; //取出緩衝區指標 (在哪個緩衝區消費的)
unsigned
short produce_id = 0;
unsigned
short consume_id = 0;
sem_t g_sem_full; //可以使用的空緩衝區數(緩衝區中可以生產多少產品)
sem_t g_sem_empty; //緩衝區內可以使用的產品數(可以消費的產品數)
pthread_mutex_t g_mutex; //互斥訊號量
pthread_t g_thread[consumers_count + producers_count];
void *consume(void *arg)
//produce()操作(生產產品)
consume_id = g_buffer[out];
printf("%d begin consume product %d\n", num, consume_id);
g_buffer[out] = -1;
//將取出緩衝區的指標偏移1(下個生產的位置)
out = (out + 1) % buffsize;
printf("%d end consume product %d\n", num, consume_id);
pthread_mutex_unlock(&g_mutex);
sem_post(&g_sem_full);
sleep(1);
}return null;
}void *produce(void *arg)
printf("%d begin produce product %d\n", num, produce_id);
g_buffer[in] = produce_id;
in = (in + 1) % buffsize;
printf("%d end produce product %d\n", num, produce_id++);
pthread_mutex_unlock(&g_mutex);
sem_post(&g_sem_empty);
sleep(5);
}return null;
}int main(void)
將程式執行,可得到這個結果
C 實現「生產者消費者」問題
有時候我們做專案時不免遇到這樣乙個問題 我們需要做乙個功能,該功能需要處理來自於其他地方的資料,但是你需要保證任務需要乙個乙個循序漸進的進行,與此同時,資料 的時機不可預知,有時任務一下子來了100條,有時一下子只來了1條,你要怎樣處理這些資料,使得這些任務被執行的時候是一條一條的執行的。描述真含糊...
生產者消費者問題C 實現
2020 10 11 11 23 設計c c 程式 可以嵌入組合語言 以忙等待方式實現訊號量及其p v操作。利用你實現的訊號量,實現生產者 消費者問題。給出實現方法 主要源 和測試結果。include include include include include include include i...
生產者 消費者問題實現
include include include include include include define need p 2 生產者程序數 define need c 2 消費者程序數 define works p 10 每個生產者程序執行的次數 define works c 10 每個消費者程序...