生產者消費者共享緩衝區,生產者向緩衝區中放資料,消費者從緩衝取中取資料,當緩衝區中被放滿時,生產者程序就必須進入掛起狀態,直到消費者從緩衝中取走資料時,生產者才能繼續向緩衝區中存放資料,同樣當緩衝取中沒有資料時,消費者程序就必須進入掛起休眠狀態,直到生產者向緩衝區中放入資料時,消費者才能被喚醒繼續從緩衝區中取走資料。
使用mutex:
#include
#include
#include
#include
#include
#include
#include
#include
struct message
;void
pthread_err
(int ret,
const
char
*str)
struct message *head =
null
;pthread_cond_t has_product = pthread_cond_initializer;
pthread_mutex_t mutex = pthread_mutex_initializer;
void
*consumer
(void
*arg)
//模擬消費資料
temp = head;
head = head->next;
pthread_mutex_unlock
(&mutex)
;printf
("-----consume %d\n"
, temp->num)
;free
(temp)
;sleep
(rand()
%3);
}return
null;}
void
*producer
(void
*arg)
return
null;}
intmain
(int argc,
char
*ar**)
使用sem:
#include
#include
#include
#include
#include
#include
#include
#include
#define num 5
int queue[num]
;//全域性陣列實現環形佇列
sem_t blank_number, product_number;
//空格訊號量和產品訊號量
void
my_err
(const
char
*str)
void
*producer
(void
*arg)
}void
*consumer
(void
*arg)
}int
main
(int argc,
char
*ar**)
生產者消費者 生產者與消費者模式
一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...
生產者消費者
using system using system.collections.generic using system.threading namespace gmservice foreach thread thread in producers q.exit console.read public...
生產者消費者
執行緒通訊 乙個執行緒完成了自己的任務時,要通知另外乙個執行緒去完成另外乙個任務.wait 等待 如果執行緒執行了wait方法,那麼該執行緒會進入等待的狀態,等待狀態下的執行緒必須要被其他執行緒呼叫notify方法才能喚醒。notify 喚醒 喚醒執行緒池等待執行緒其中的乙個。notifyall 喚...