国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

淺談Linux條件變量的使用

2019-11-02 16:49:22
字體:
來源:轉載
供稿:網友

Linux線程同步之間存在多種機制,條件變量是一種類似操作系統里提到的生產者-消費者算法的同步機制,允許線程以無競爭的方式等待特定條件的發生。

示例偽代碼:

void* Thread1(void){  while(線程運行條件成立){    …    pthread_mutex_lock(qlock);    while(條件成立)pthread_cond_wait(qcond,qlock);或者pthread_cond_wait(qcond,qlock,timeout);      reset條件變量…    pthread_mutex_unlock(qlock);  }}void* Thread2(void){  while(線程運行條件成立){    …    pthread_mutex_lock(qlock);    set了條件變量…//可以發送處理信號    pthread_cond_signal(qcond);    或者    pthread_cond_broadcast(qcond);    pthread_mutex_unlock(qlock);  }}

條件變量需要配合互斥量一起使用,互斥量作為參數傳入wait函數,函數把調用線程放到等待條件的線程列表上,然后對互斥量解鎖,這兩個是原子操作。當線程等待到條件,從wait函數返回之前,會再次鎖住互斥量。

1.Lock
2.Unlock
3.等待
4.Lock
5.Unlock

第2,3,4步是wait的內部操作

在wait被喚醒后,還需要在while中去檢查條件,這是為了防止“驚群效應”,比如有兩個線程同時阻塞在wait,先后醒來,快的線程做完處理然后把條件reset了,并且對互斥量解鎖,此時慢的線程在wait里獲得了鎖(即第4步)返回,還再去做處理就會出問題。

以上就是小編為大家帶來的淺談Linux條件變量的使用全部內容了,希望大家多多支持腳本之家~

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 华亭县| 龙里县| 沽源县| 探索| 靖宇县| 盐亭县| 嘉鱼县| 许昌市| 长顺县| 封开县| 曲水县| 宣汉县| 普安县| 石棉县| 汤原县| 葫芦岛市| 抚顺市| 柯坪县| 崇阳县| 琼结县| 天津市| 株洲市| 三亚市| 邯郸市| 五莲县| 格尔木市| 大洼县| 定兴县| 明溪县| 曲靖市| 来凤县| 嘉定区| 清苑县| 鹤峰县| 泊头市| 盐津县| 天等县| 榆中县| 奎屯市| 韩城市| 卫辉市|