Linux之執行緒條件變數cond

2021-10-21 02:29:54 字數 1656 閱讀 3649

概念:條件變數不是鎖,要和互斥量組合使用。條件變數就是生產者「生產」完成,消費者才能「使用」,如果沒有「產品」,消費者就會被條件變數cond阻塞等待生產者「生產」。(生產者與消費者模型)

函式:

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);

struct timespecprodinfo;

prodinfo *head = null;

void *thr_producter(void *arg)

return null;

}void *thr_customer(void *arg)

prod = head;

head = head->next;

printf("----%s----self = %lu----%d\n",__function__,pthread_self(),prod->num);

pthread_mutex_unlock(&mutex);

sleep(rand()%4);

free(prod);

}return null;

}int main()

輸出:~$ gcc cond_product.c -lpthread

~$ ./a.out

----thr_producter----self = 140197865371392----1000

----thr_customer----self = 140197856978688----1000

----thr_producter----self = 140197865371392----1001

----thr_customer----self = 140197731759872----1001

----thr_producter----self = 140197865371392----1002

----thr_customer----self = 140197856978688----1002

----thr_producter----self = 140197865371392----1003

----thr_producter----self = 140197865371392----1004

----thr_producter----self = 140197865371392----1005

----thr_customer----self = 140197731759872----1005

----thr_producter----self = 140197865371392----1006

----thr_producter----self = 140197865371392----1007

----thr_customer----self = 140197856978688----1007

----thr_customer----self = 140197731759872----1006

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

執行緒同步 條件變數 cond 再引入條件變數之前,我們先看下生產者和消費者問題 生產者不斷地生產產品,同時消費者不斷地在消費產品。這個問題的同步在於兩處 第一,消費者之間需要同步 同一件產品只可由一人消費。第二,當無產品可消費時,消費者需等待生產者生產後,才可繼續消費,這又是乙個同步問題。詳細了解...

Linux執行緒同步之條件變數

與互斥鎖不同,條件變數是用來等待而不是用來上鎖的。條件變數用來自動阻塞乙個執行緒,直到某特殊情況發生為止。通常條件變數和互斥鎖同時使用。條件變數使我們可以睡眠等待某種條件出現。條件變數是利用執行緒間共享的全域性變數進行同步的一種機制,主要包括兩個動作 乙個執行緒等待 條件變數的條件成立 而掛起 另乙...

linux 執行緒學習之條件變數

下面是乙個簡單的例子,我們可以從程式的執行來了解條件變數的作用。include include include pthread mutex t mutex pthread mutex initializer 初始化互斥鎖 pthread cond t cond pthread cond initia...