Linux系統程式設計 生產者消費者問題

2021-10-06 21:31:21 字數 1615 閱讀 3921

生產者消費者共享緩衝區,生產者向緩衝區中放資料,消費者從緩衝取中取資料,當緩衝區中被放滿時,生產者程序就必須進入掛起狀態,直到消費者從緩衝中取走資料時,生產者才能繼續向緩衝區中存放資料,同樣當緩衝取中沒有資料時,消費者程序就必須進入掛起休眠狀態,直到生產者向緩衝區中放入資料時,消費者才能被喚醒繼續從緩衝區中取走資料。

使用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 喚...