Linux執行緒(四)

2021-10-02 03:13:08 字數 3096 閱讀 8229

pthread_cond_t cond = pthread_cond_initializer
int

pthread_cond_init

(pthread_cond_t *restrict cond,

const pthread_condattr_t *restrict attr)

;

pthread_cond_t *restrict cond:待初始化的條件變數

const pthread_condattr_t *restrict attr:指定條件變數的屬性,一般填null,使用預設屬性

int

pthread_cond_destroy

(pthread_cond_t *cond)

;

int

pthread_cond_wait

(pthread_cond_t *restrict cond,

pthread_mutex_t *restrict mutex)

pthread_cond_t *restrict cond:要在這個條件變數上進行等待

pthread_mutex_t *restrict mutex:互斥量

int

pthread_cond_broadcast

(pthread_cond_t *cond)

;int

pthread_cond_signal

(pthread_cond_t *cond)

;

例子:

// 錯誤的設計

pthread_mutex_lock

(&mutex)

;while

(condition_is_false)

pthread_mutex_unlock

(&mutex)

;

pthread_mutex_lock

(&mutex)

;while

(條件為假)

pthread_cond_wait

(cond, mutex)

;修改條件

pthread_mutex_unlock

(&mutex)

;

pthread_mutex_lock

(&mutex)

;設定條件為真

pthread_cond_signal

(cond)

;pthread_mutex_unlock

(&mutex)

;

生產者消費者模式就是通過乙個容器來解決生產者和消費者的強耦合問題生產者和消費者彼此之間不直接通訊,而通過阻塞佇列來進行通訊,所以生產者生產完資料之後不用等待消費者處理,直接扔給阻塞佇列,消費者不找生產者要資料,而是直接從阻塞佇列裡取,阻塞佇列就相當於乙個緩衝區,平衡了生產者和消費者的處理能力。這個阻塞佇列就是用來給生產者和消費者解耦的

例子:單生產者單消費者**:

Linux多執行緒學習(四)pthread self

原型 include pthread t pthread self void 說明 獲取本程序自身的 id。程序 id 型別是 pthread t 這個型別一般為long long 型,8個位元組。測試 include include include void thread one void thr...

Linux 執行緒 四 (訊號量)

執行緒中的訊號量和程序中的訊號量的作用相同,都是用於同步操作,達到無衝突的訪問共享資源的目的。但是它們也是有一定的區別的。執行緒中的訊號量通過引數的不同,也可以在程序間使用。和semget 函式建立的訊號量不同,執行緒中的訊號量可以使兩個執行緒進行同步。我們先看一下執行緒中訊號量的api及其引數 i...

執行緒解析 四

華清遠見嵌入式學院 講師。一 執行緒控制 上一節我們講了使用互斥量實現執行緒的同步,這裡我們介紹一下另外一種常用的方法,posix提供的無名訊號量sem,pv原語是對整數計數器訊號量sem的操作,p操作判斷sem資源數是否為0,不為0則進行p操作,一次p操作可使sem減一,而一次v操作可使sem加一...