淺談Linux條件變量的使用
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)文章
Centos 7下利用crontab定時(shí)執(zhí)行任務(wù)詳解
這篇文章主要給大家介紹了關(guān)于Centos 7下利用crontab定時(shí)執(zhí)行任務(wù)的相關(guān)資料,文中對(duì)crontab進(jìn)行了詳細(xì)的介紹,并給出了一些實(shí)例代碼供大家參考學(xué)習(xí),需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。2017-06-06
詳解linux ntp服務(wù)器時(shí)間同步設(shè)置
這篇文章主要介紹了linux ntp服務(wù)器時(shí)間同步設(shè)置的相關(guān)資料,需要的朋友可以參考下2017-07-07
Linux之配置路由轉(zhuǎn)發(fā)功能的測(cè)試
這篇文章主要介紹了Linux之配置路由轉(zhuǎn)發(fā)功能的測(cè)試,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
rsync中文手冊(cè)之使用rsync實(shí)現(xiàn)網(wǎng)站鏡像和備份linux
用rsync實(shí)現(xiàn)網(wǎng)站鏡像和備份 雖然是linux下的操作,但原理和windows下類似2008-09-09
Nginx虛擬主機(jī)多server_name的順序問(wèn)題
今天在配置Nginx + PHP + MediaWiki中,發(fā)現(xiàn)一個(gè)問(wèn)題:MediaWiki所在的Nginx虛擬主機(jī)綁定了多個(gè)域名,但是不管通過(guò)什么域名訪問(wèn)MediaWiki首頁(yè),都會(huì)被跳轉(zhuǎn)到其中的一個(gè)域名上。2008-12-12
新版VPS主機(jī)管理面板WDCP安裝及使用體驗(yàn)-國(guó)產(chǎn)簡(jiǎn)單易用型VPS面板
這篇文章主要介紹了新版VPS主機(jī)管理面板WDCP安裝及使用體驗(yàn)-國(guó)產(chǎn)簡(jiǎn)單易用型VPS面板,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
Linux下tar解壓錯(cuò)誤:文件損壞與不完整問(wèn)題的解決方案
在日常的 Linux 系統(tǒng)管理中,我們經(jīng)常需要使用 tar 命令來(lái)壓縮和解壓文件,然而,有時(shí)在解壓過(guò)程中會(huì)遇到諸如“文件損壞”或“意外結(jié)束”等錯(cuò)誤提示,本文將詳細(xì)分析這些問(wèn)題的原因,并提供一套完整的解決方案,需要的朋友可以參考下2025-02-02

