最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談Linux條件變量的使用

 更新時(shí)間:2017年01月05日 10:02:35   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇淺談Linux條件變量的使用。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

Linux線程同步之間存在多種機(jī)制,條件變量是一種類似操作系統(tǒng)里提到的生產(chǎn)者-消費(fèi)者算法的同步機(jī)制,允許線程以無(wú)競(jìng)爭(zhēng)的方式等待特定條件的發(fā)生。

示例偽代碼:

void* Thread1(void){
  while(線程運(yùn)行條件成立){
    …
    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(線程運(yùn)行條件成立){
    …
    pthread_mutex_lock(qlock);
    set了條件變量…//可以發(fā)送處理信號(hào)
    pthread_cond_signal(qcond);
    或者
    pthread_cond_broadcast(qcond);
    pthread_mutex_unlock(qlock);
  }
}

條件變量需要配合互斥量一起使用,互斥量作為參數(shù)傳入wait函數(shù),函數(shù)把調(diào)用線程放到等待條件的線程列表上,然后對(duì)互斥量解鎖,這兩個(gè)是原子操作。當(dāng)線程等待到條件,從wait函數(shù)返回之前,會(huì)再次鎖住互斥量。

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

第2,3,4步是wait的內(nèi)部操作

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

以上就是小編為大家?guī)?lái)的淺談Linux條件變量的使用全部?jī)?nèi)容了,希望大家多多支持腳本之家~

相關(guān)文章

最新評(píng)論

县级市| 朝阳区| 泌阳县| 定陶县| 洛隆县| 无极县| 永丰县| 西林县| 江都市| 景谷| 务川| 河源市| 顺义区| 北票市| 随州市| 策勒县| 朝阳市| 泗洪县| 平远县| 巢湖市| 阜城县| 上犹县| 阿荣旗| 廊坊市| 杭锦旗| 卓尼县| 宁武县| 宜良县| 宁南县| 泉州市| 天水市| 巴楚县| 南康市| 深水埗区| 无极县| 蒙自县| 张家港市| 平遥县| 托克托县| 阳城县| 盐城市|