#include #include #define buffer_size 16 // 緩衝區數量
struct prodcons
;/* 初始化緩衝區結構 */
void init(struct prodcons *b)
/* 將產品放入緩衝區,這裡是存入乙個整數*/
void put(struct prodcons *b, int data)
/* 寫資料,並移動指標 */
b->buffer[b->writepos] = data;
b->writepos++;
if (b->writepos >= buffer_size)
b->writepos = 0;
/* 設定緩衝區非空的條件變數*/
pthread_cond_signal(&b->notempty);
pthread_mutex_unlock(&b->lock);
} /* 從緩衝區中取出整數*/
int get(struct prodcons *b)
/* 讀資料,移動讀指標*/
data = b->buffer[b->readpos];
b->readpos++;
if (b->readpos >= buffer_size)
b->readpos = 0;
/* 設定緩衝區未滿的條件變數*/
pthread_cond_signal(&b->notfull);
pthread_mutex_unlock(&b->lock);
return data;
}/* 測試:生產者執行緒將1 到10000 的整數送入緩衝區,消費者線
程從緩衝區中獲取整數,兩者都列印資訊*/
#define over ( - 1)
struct prodcons buffer;
void *producer(void *data)
put(&buffer, over);
return null;
}void *consumer(void *data)
return null;
}int main(void)
生產者消費者 生產者與消費者模式
一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...
生產者消費者
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 喚...