Linux多線程編程——線程同步.doc

Linux多線程編程——線程同步.doc

ID:61462301

大?。?3.00 KB

頁(yè)數(shù):5頁(yè)

時(shí)間:2021-02-02

Linux多線程編程——線程同步.doc_第1頁(yè)
Linux多線程編程——線程同步.doc_第2頁(yè)
Linux多線程編程——線程同步.doc_第3頁(yè)
Linux多線程編程——線程同步.doc_第4頁(yè)
Linux多線程編程——線程同步.doc_第5頁(yè)
資源描述:

《Linux多線程編程——線程同步.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)

1、Linux多線程編程——線程同步lym發(fā)布于2008-4-30

2、704次閱讀??字號(hào):大?中?小??(網(wǎng)友評(píng)論?8?條)?我要評(píng)論04-30Linux多線程同步——mutex[折疊]1.初始化:在Linux下,線程的互斥量數(shù)據(jù)類(lèi)型是pthread_mutex_t.在使用前,要對(duì)它進(jìn)行初始化:對(duì)于靜態(tài)分配的互斥量,可以把它設(shè)置為PTHREAD_MUTEX_INITIALIZER,或者調(diào)用pthread_mutex_init.對(duì)于動(dòng)態(tài)分配的互斥量,在申請(qǐng)內(nèi)存(malloc)之后,通過(guò)pthread_mutex

3、_init進(jìn)行初始化,并且在釋放內(nèi)存(free)前需要調(diào)用pthread_mutex_destroy.原型:intpthread_mutex_init(pthread_mutex_t*restrictmutex,constpthread_mutexattr_t*restricattr);intpthread_mutex_destroy(pthread_mutex_t*mutex);頭文件:返回值:成功則返回0,出錯(cuò)則返回錯(cuò)誤編號(hào).說(shuō)明:如果使用默認(rèn)的屬性初始化互斥量,只需把a(bǔ)ttr設(shè)為NULL.其他值在以

4、后講解.2.互斥操作:對(duì)共享資源的訪問(wèn),要對(duì)互斥量進(jìn)行加鎖,如果互斥量已經(jīng)上了鎖,調(diào)用線程會(huì)阻塞,直到互斥量被解鎖.在完成了對(duì)共享資源的訪問(wèn)后,要對(duì)互斥量進(jìn)行解鎖.首先說(shuō)一下加鎖函數(shù):頭文件:原型:intpthread_mutex_lock(pthread_mutex_t*mutex);intpthread_mutex_trylock(pthread_mutex_t*mutex);返回值:成功則返回0,出錯(cuò)則返回錯(cuò)誤編號(hào).說(shuō)明:具體說(shuō)一下trylock函數(shù),這個(gè)函數(shù)是非阻塞調(diào)用模式,也就是說(shuō),如果互斥量沒(méi)

5、被鎖住,trylock函數(shù)將把互斥量加鎖,并獲得對(duì)共享資源的訪問(wèn)權(quán)限;如果互斥量被鎖住了,trylock函數(shù)將不會(huì)阻塞等待而直接返回EBUSY,表示共享資源處于忙狀態(tài).再說(shuō)一下解所函數(shù):頭文件:原型:intpthread_mutex_unlock(pthread_mutex_t*mutex);返回值:成功則返回0,出錯(cuò)則返回錯(cuò)誤編號(hào).3.死鎖:死鎖主要發(fā)生在有多個(gè)依賴(lài)鎖存在時(shí),會(huì)在一個(gè)線程試圖以與另一個(gè)線程相反順序鎖住互斥量時(shí)發(fā)生.如何避免死鎖是使用互斥量應(yīng)該格外注意的東西.總體來(lái)講,有幾個(gè)不成文的基本原

6、則:對(duì)共享資源操作前一定要獲得鎖.完成操作以后一定要釋放鎖.盡量短時(shí)間地占用鎖.如果有多鎖,如獲得順序是ABC連環(huán)扣,釋放順序也應(yīng)該是ABC.線程錯(cuò)誤返回時(shí)應(yīng)該釋放它所獲得的鎖.談了這么多就讓我舉個(gè)實(shí)際點(diǎn)的例子來(lái)說(shuō)明以上函數(shù)的功能:(代碼來(lái)源于:《GPRS服務(wù)器Linux編程》作者:李楊明)#include#include#include#include#includepthread_mutex_tmutex=PTHREAD_MUTEX_INITIALIZER;intlock_var;time_tend_

7、time;intsum;voidpthread1(void*arg);voidpthread2(void*arg);voidpthread3(void*arg);intmain(intargc,char*argv[]){pthread_tid1,id2,id3;pthread_tmon_th_id;intret;sum=10;end_time=time(NULL)+10;pthread_mutex_init(&mutex,NULL);ret=pthread_create(&id1,NULL,(void*)

8、pthread1,NULL);if(ret!=0)perror("pthreadcread1");ret=pthread_create(&id2,NULL,(void*)pthread2,NULL);if(ret!=0)perror("pthreadcread2");ret=pthread_create(&id3,NULL,(void*)pthread3,NULL);if(ret!=0)perror("pthreadcread3");pthread_join(id1,NULL);pthread_join(

9、id2,NULL);pthread_join(id3,NULL);exit(0);}voidpthread1(void*arg){inti;while(time(NULL)

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。