日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux条件变量

發布時間:2024/7/19 linux 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux条件变量 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

某個線程正在等待共享數據內某個條件出現,可可能需要重復對數據對象加鎖和解鎖(輪詢),但是這樣輪詢非常耗費時間和資源,而且效率非常低。我們需要這樣一種方法:當線程在等待滿足某些條件時使線程進入睡眠狀態,一旦條件滿足,就喚醒因等待滿足特定條件而睡眠的線程

條件變量

條件變量是用來等待線程而不是上鎖的。條件變量使我們可以睡眠等待某種條件出現。條件變量主要包括兩個動作:一個線程等待”條件變量的條件成立”而掛起;另一個線程使”條件成立”(給出條件成立信號)。

為了防止競爭,條件變量的使用總是和一個互斥鎖結合在一起。對條件的測試是在互斥鎖(互斥)的保護下進行的。

使用時,條件變量被用來阻塞一個線程,當條件不滿足時,線程往往解開響應的互斥鎖并等待條件發生變化,一旦其他的某個線程改變了條件變量,它將通知相應的條件變量喚醒一個或多個正被此條件變量阻塞的線程,這些線程將重新鎖定互斥鎖并且重新測試條件是否滿足

等待

兩種等待方式,無條件等待pthread_cond_wait()和計時等待pthread_cond_timedwait()。其中計時等待方式如果在給定時刻前條件沒有滿足,則返回ETIMEOUT,結束等待。

喚醒

喚醒條件有兩種形式,pthread_cond_signal()喚醒一個等待該條件的線程,存在多個等待線程時按入隊順序喚醒其中一個;而pthread_cond_broadcast()則喚醒所有等待線程。

喚醒阻塞在條件變量上的所有線程的順序由調度策略決定,如果線程的調度策略是SCHED_OTHER類型的,系統將根據線程的優先級喚醒線程。

由于pthread_cond_broadcast函數喚醒所有阻塞在某個條件變量上的線程,這些線程被喚醒后將再次競爭相應的互斥鎖,所以必須小心使用pthread_cond_broadcast函數。

總結

以上是生活随笔為你收集整理的linux条件变量的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。