linux 生產者與消費者問題
生產者與消費者問題(也稱執行緒同步問題)
講到執行緒必然會講到執行緒同步,那什麼是執行緒同步楠?
執行緒同步概念:即當有一個執行緒在對記憶體進行操作時,其他執行緒都不可以對這個記憶體地址進行操作,直到該執行緒完成操作, 其他執行緒才能對該記憶體地址進行操作,而其他執行緒又處於等待狀態,實現執行緒同步的方法有很多,臨界區物件就是其中一種。
生產者消費者模型1(三個互斥量)
這裡主要對執行緒與互斥量做初始化與建立的工作,不瞭解的引數可以使用man … 與檢視幫助文件
這裡是一些標頭檔案與一些需要用到的引數
這裡是生產者的回撥函式,注意一下加鎖的順序與釋放鎖的順序,不然可能會造成死鎖,看的小夥伴注意一下
這裡是消費者的回撥函式,互斥量的順序問題注意一下,鎖的粒度也可以稍微調整,為了方便看資訊,暫時沒有去優化鎖的粒度,在高併發的時候,鎖的粒度越小越好
生產者與消費者模型2(條件變數加互斥鎖)
這裡是互斥量,條件變數的一些初始化操作,只建立了一個生產者執行緒與一個消費者執行緒,回撥函式內部採用迴圈來控制
這裡是生產者的回撥函式,當生產了一個產品,就呼叫pthread_cond_signal去喚醒一個阻塞的消費者執行緒
這塊是消費者的回撥函式,pthread_cond_wait函式在條件滿足的時候會立即釋放它佔有的鎖,因此不會造成死鎖
執行結果
由於我設定了執行緒睡眠(sleep),所以會造成連續的add與remove, 但是這並不影響我們的預期
最後我總結一下,可能我不是很會寫部落格,希望大家不要介意,以後會多多的參考別人的部落格,希望能夠以後能夠講解清除
相關文章
- 生產者與消費者問題
- java實現生產者消費者問題Java
- 面試必問:訊號量與生產者消費者問題!面試
- python中多程式消費者生產者問題Python
- 九、生產者與消費者模式模式
- 生產者消費者
- 生產者與消費者之Android audioAndroid
- python中多執行緒消費者生產者問題Python執行緒
- 作業系統—生產者消費者問題詳解作業系統
- 生產者消費者問題-C++程式碼實現C++
- 生產者消費者模式模式
- 生產者消費者模型模型
- python 生產者消費者模式Python模式
- 生產消費者模式模式
- 讀者寫者與生產者消費者應用場景
- 6、JUC:傳統的生產者消費者問題,防止虛假喚醒問題
- ActiveMQ 生產者和消費者demoMQ
- 使用wait()與notifyAll()實現生產者與消費者模式AI模式
- 生產消費問題
- PHP操作Beanstalkd佇列(2)生產者與消費者PHPBean佇列
- 「Kafka應用」PHP實現生產者與消費者KafkaPHP
- java學習回顧---生產者與消費者問題以及多執行緒補充Java執行緒
- java進階(40)--wait與notify(生產者與消費者模式)JavaAI模式
- 新手練習-消費者生產者模型模型
- Java實現生產者和消費者Java
- python執行緒通訊與生產者消費者模式Python執行緒模式
- Python-多執行緒及生產者與消費者Python執行緒
- 阻塞佇列和生產者-消費者模式佇列模式
- 訊號量實現生產者消費者(程式碼邏輯有問題,不適合多個消費者,不常用)
- Java 多執行緒基礎(十二)生產者與消費者Java執行緒
- Java多執行緒——消費者與生產者的關係Java執行緒
- python 多執行緒實現生產者與消費者模型Python執行緒模型
- GoLang中生產者消費者模式解決併發問題Golang模式
- 執行緒同步介紹及 生產者消費者問題舉例 C#版執行緒C#
- Qt基於QSemaphore的生產者消費者模型QT模型
- 使用BlockQueue實現生產者和消費者模式BloC模式
- 使用Disruptor實現生產者和消費者模型模型
- 鎖,threading local,以及生產者和消費者模型thread模型