生產者 消費者

2021-09-30 15:36:03 字數 1113 閱讀 8482

#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 喚...