執行緒的同步與互斥 生產者消費者模型

2021-07-12 04:28:33 字數 2065 閱讀 4186

生產者與消費者模型

生產者與消費者模型是一種描述程序間同步與互斥的乙個方式,在這個模式下有兩類人,乙個是不停產生資料的生產者,乙個是不停獲取資料的消費者,為了效率最高,就必須保持兩者之間的同步與互斥。

為了在生產者與消費者使用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 ...

生產者消費者 生產者與消費者模式

一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...