生產者與消費者模型
生產者與消費者模型是一種描述程序間同步與互斥的乙個方式,在這個模式下有兩類人,乙個是不停產生資料的生產者,乙個是不停獲取資料的消費者,為了效率最高,就必須保持兩者之間的同步與互斥。
為了在生產者與消費者使用mutex保持互斥的前提下,posix版本下還有另外乙個函式cond它的作用是在生產者生產出來乙個資料時便提醒消費者,而消費者在沒東西消費時可以使用cond將自己保持在乙個等待生產者訊號和關閉鎖的狀態,當收到訊號時將鎖開啟然後消費。
這是cond的建立與銷毀:
#include int pthread_cond_destroy(pthread_cond_t *cond);
int pthread_cond_init(pthread_cond_t *restrict cond,
const pthread_condattr_t *restrict attr);
pthread_cond_t cond = pthread_cond_initializer;
cond的傳送訊號的函式
#include int pthread_cond_broadcast(pthread_cond_t *cond);//用向所有正在等待該資源產生的進 //程傳送訊號
int pthread_cond_signal(pthread_cond_t *cond);//向單個傳送
cond的等待函式
#include int pthread_cond_timedwait(pthread_cond_t *restrict cond,//非阻塞式等待
pthread_mutex_t *restrict mutex,
const struct timespec *restrict abstime);
int pthread_cond_wait(pthread_cond_t *restrict cond,//阻塞式等待
pthread_mutex_t *restrict mutex);
**實現:
緩衝區模型為乙個頭插頭刪的鍊錶
單個消費者和單個生產者:
1 #include2 #include3 #include4
5 pthread_mutex_t comm = pthread_mutex_initializer;
6 pthread_cond_t cond = pthread_cond_initializer;
7 8 typedef int data_type;
9 typedef struct listlist;
13 void init_list(list *head)
14 17 void push(list *head,data_type data)
18 26 else
32 }
33 34 int pop(list *head,data_type*data)
35 40 else
41
48 }
49 50 void display_list(list *head)
51 59 }
60 list head;
61 62 void * producter(void *arg)
63 74 }
75 void * constumer(void *arg)
76 88 printf("constumer :%d\n",data);
89 pthread_mutex_unlock(&comm);
90 }
91 }
92 int main()
93
本文出自 「痕跡」 部落格,請務必保留此出處
執行緒 同步與互斥 消費者 生產者模型
執行緒互斥用互斥鎖,執行緒的同步則用到條件變數。條件變數是用來描述執行緒間同步的。下面以生產者 消費者為例 生產者和消費者之間存在同步與互斥的關係。生產者之間 消費者之間存在互斥的關係 include include includestatic int i 1 pthread mutex t loc...
生產者與消費者(執行緒同步問題)
主函式 public class productandcustorm 以下是產品類,生產者類,消費者類 產品 class product num p system.out.println 生產者生產了 p 個產品,現有 num 個產品.this.notifyall thread.sleep 200 ...
生產者消費者 生產者與消費者模式
一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...