linux中條件變數和訊號量的區別!
在Linux系統中,條件變數和訊號量是非常專業的詞彙,也是我們每個人都會接觸到的知識,那麼Linux中條件變數和訊號量有什麼區別?以下是具體內容介紹。
條件變數
條件變數使在多執行緒程式中用來實現“等待--->喚醒”邏輯常用的方法,是程式間同步的一種機制。條件變數用來阻塞一個執行緒,直到條件滿足被觸發為止,通常情況下條件變數和互斥量同時使用。
一般條件變數有兩個狀態:
①一個/多個執行緒為等待"條件變數的條件成立"而掛起;
②另一個執行緒在"條件變數條件成立時"通知其他執行緒。
訊號量
訊號量是一種特殊的變數,訪問具有原子性。
只允許對它進行兩個操作:
①等待訊號量:當訊號量值為0時,程式等待;當訊號量值大於0時,訊號量減1,程式繼續執行。
②傳送訊號量:將訊號量值加1。
說明:Linux提供了一組訊號量API,宣告在標頭檔案sys/sem.h中。
Linux條件變數和訊號量的區別:
①使用條件變數可以一次喚醒所有等待者,而這個訊號量沒有的功能,感覺是最*區別。
②訊號量始終有一個值,而條件變數是沒有的,沒有地方記錄喚醒過多少次,也沒有地方記錄喚醒執行緒過多少次。從實現上來說一個訊號量可以歐尼顧mutex+counter+condition variable實現的。因為訊號量有一個狀態,如果想精準的同步,那麼訊號量可能會有特殊的地方。訊號量可以解決條件變數中存在的喚醒丟失問題。
③訊號量的意圖在於程式間同步,互斥鎖和條件變數的意圖在於執行緒間同步,但是訊號量也可用於執行緒間,互斥鎖和條件變數也可用於程式間。應當根據實際的情況進行決定。訊號量最有用的場景是用以指明可用資源的數量。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952527/viewspace-2938077/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Jtti:linux下訊號量和互斥鎖有哪些區別?JttiLinux
- 附個人工作程式碼 條件變數深度運用、互斥鎖+訊號量變數
- C++中的條件變數C++變數
- Linux Qt使用POSIX多執行緒條件變數、互斥鎖(量)LinuxQT執行緒變數
- shell中定義變數用雙引號和單引號以及不用引號的區別變數
- Condition條件變數變數
- pthread 條件變數thread變數
- Linux中訊號量的實現Linux
- Linux中的System V訊號量Linux
- Spark 外部變數和BroadCast變數的區別Spark變數AST
- Linux中“>”和“>>”的區別Linux
- Python中類變數、成員變數、區域性變數的區別Python變數
- 秒懂 Golang 中的 條件變數(sync.Cond)Golang變數
- Bold訊號與fNIRS訊號的區別
- Oracle中單引號和雙引號的區別Oracle
- 成員變數、全域性變數、例項變數、類變數、靜態變數和區域性變數的區別變數
- 修改全域性變數時,可變型別和不可變型別的區別變數型別
- SQL Server解惑——查詢條件IN中能否使用變數SQLServer變數
- sql 使用變數帶入in條件SQL變數
- C語言中迴圈語句while 中判斷條件出現 || 和 && 的區別C語言While
- Python中合法識別符號需要滿足什麼條件?Python符號
- Python中的全域性變數和區域性變數Python變數
- 區域性變數和全域性變數(靜態和非靜態)區別變數
- STM32的UCOS訊號量和互斥訊號量
- Golang 併發程式設計中條件變數的理解與使用Golang程式設計變數
- Linux中斷訊號有幾種?它們之間的區別是什麼?Linux
- 條件變數如何避免丟失通知變數
- 多執行緒06:條件變數執行緒變數
- Linux中rmdir和rm命令的主要區別!Linux
- 【linux】free命令中cached和buffers的區別Linux
- Linux 中 awk指令 sub和substr的區別Linux
- Linux free 命令中cached 和 buffers 的區別Linux
- Python 函式中引數前面一個和兩個星號(**)的區別Python函式
- javascript中的作用域(全域性變數和區域性變數)JavaScript變數
- [題解] 條件變數實現數字的交替輸出變數
- Python執行緒條件變數Condition解析Python執行緒變數
- Linux中&&和&,|和||用法及區別詳解!Linux
- 在Linux中,Linux核心和Shell有何區別?Linux