linux系統程式設計 執行緒同步 條件變數 cond

2021-07-04 02:39:34 字數 1108 閱讀 3551

執行緒同步-條件變數(cond)

再引入條件變數之前,我們先看下生產者和消費者問題:生產者不斷地生產產品,同時消費者不斷地在消費產品。

這個問題的同步在於兩處:第一,消費者之間需要同步:同一件產品只可由一人消費。第二,當無產品可消費時,消費者需等待生產者生產後,才可繼續消費,這又是乙個同步問題。詳細了解:生產者消費者問題。

條件變數是利用執行緒間共享的全域性變數進行同步的一種機制,並且條件變數總是和互斥鎖結合在一起。

pthread_cond_t   //條件變數型別

pthread_cond_init

pthread_cond_destroy

pthread_cond_wait(pthread_cond_t *, pthread_mutex_t *)

pthread_cond_timedwait

pthread_cond_signal

pthread_cond_broadcast

其中,需要著重理解的是pthread_cond_wait()方法,它有三個作用:

所有執行到此處的執行緒被阻塞,直到條件變數的喚醒。

在阻塞的同時釋放鎖。

當被喚醒後,重新去獲取鎖。

喚醒執行緒的函式有兩個:pthread_cond_signal和pthread_cond_broadcast,前者喚醒乙個,後者喚醒所有的。

運用條件變數,我們來解決下生產者和消費者問題:

#include #include #include #include struct goods

;pthread_mutex_t m;

pthread_cond_t has_product;

struct goods *head;

void *producer(void *argv)

return (void *)0;

}void *comsumer(void *argv)

return (void *)0;

}int main(void)

在**中,我們開啟兩個執行緒作為生產者,三個執行緒作為消費者。產品使用鍊錶儲存,並且每次生產和消費都在鍊錶頭部發生。

ccpp blog 目錄

Linux系統程式設計 執行緒同步概念

同步概念 同步,指對在乙個系統中所發生的事件之間進行協調,在時間上出現一致性與統一化的現象。但是,對於不同行業,對於同步的理解略有不同。比如 裝置同步,是指在兩個裝置之間規定乙個共同的時間參考 資料庫同步,是指讓兩個或多個資料庫內容保持一致,或者按需要部分保持一致 檔案同步,是指讓兩個或多個資料夾裡...

Linux系統程式設計之執行緒條件變數

include include include include pthread cond t cond pthread cond initializer 初始化條件變數 pthread mutex t mutex pthread mutex initializer 靜態初始化互斥鎖 struct m...

linux系統程式設計 執行緒

include int pthread create pthread t thread,const pthread attr t attr,void start routine void void arg include include include include include include...