互斥鎖的使用

互斥鎖的使用

ID:44325422

大?。?3.50 KB

頁數(shù):4頁

時間:2019-10-20

互斥鎖的使用_第1頁
互斥鎖的使用_第2頁
互斥鎖的使用_第3頁
互斥鎖的使用_第4頁
資源描述:

《互斥鎖的使用》由會員上傳分享,免費在線閱讀,更多相關內容在應用文檔-天天文庫。

1、互斥鎖索引:1.初始化互斥鎖pthread_mutex_init2.鎖定互斥鎖pthread_mutex_lock3.解鎖互斥鎖pthread_mutex_unlock4.非阻塞的鎖定互斥鎖pthread_mutex_trylock5.釋放互斥鎖pthread_mutex_destroy6.分級鎖定________________________________________1.初始化互斥鎖pthread_mutex_init#includeintpthread_mutex_init(pthread_mutex_t*mp,constpthread

2、_mutexattr_t*mattr);返回值:函數(shù)成功返回0;任何其他返回值都表示錯誤當輸入?yún)?shù)mattr為空指針時,pthread_mutex_init()函數(shù)以默認值初始化由參數(shù)mp指定的互斥鎖。當輸入?yún)?shù)mattr指向一個互斥鎖屬性對象時,pthread_mutex_init()函數(shù)被用來創(chuàng)建一個指定屬性的互斥鎖,其屬性為參數(shù)mattr指向的互斥鎖屬性對象的屬性。初始化一個互斥鎖以后,這個互斥鎖處在解鎖狀態(tài)。對于靜態(tài)定義的互斥鎖,可以直接通過宏PTHREAD_MUTEX_INITIALIZER將其初始化為具有缺省屬性。如:pthread_mutex_tmp=PTH

3、READ_MUTEX_INITIALIZER;當其他線程仍然需要使用某個互斥鎖時,這個互斥鎖不能被重新初始化或釋放。否則將會造成程序故障,在釋放、初始化一個互斥鎖之前,應用程序必須先確認這個互斥鎖未被使用。2.鎖定互斥鎖pthread_mutex_lock#includeintpthread_mutex_lock(pthread_mutex_t*mutex);返回值:函數(shù)成功返回0;任何其他返回值都表示錯誤鎖定mutex參數(shù)指向的互斥鎖對象。當這個函數(shù)返回時,相應的互斥鎖被鎖定,調用pthread_mutex_lock函數(shù)的線程成為這個互斥鎖的擁有者

4、。如果這個互斥鎖已經(jīng)被其他線程鎖定,那么調用pthread_mutex_lock函數(shù)的線程將一直被阻塞,直到獲得這個互斥鎖。錯誤檢測和死鎖處理依賴于互斥鎖類型。3.解鎖互斥鎖pthread_mutex_unlock#includeintpthread_mutex_unlock(pthread_mutex_t*mutex);返回值:函數(shù)成功返回0;任何其他返回值都表示錯誤解開已鎖定了的互斥鎖。解開互斥鎖的具體操作根據(jù)互斥鎖類型的不同而不同。如果調用pthread_mutex_unlock解開一個互斥鎖時,有多個線程正被這個互斥鎖阻塞,那么系統(tǒng)將根據(jù)調度

5、策略決定哪個線程將獲得這個互斥鎖(對于PTHREAD_MUTEX_RECURSIVE類型的互斥鎖來說,只有當互斥鎖的鎖定計數(shù)減少為0時,pthread_mutex_unlock函數(shù)才會解開這個互斥鎖,調度被這個互斥鎖阻塞的線程)。在缺省的調度策略(SCHED_OTHER)下,一般是按照線程的優(yōu)先級高低來釋放阻塞線程,重新鎖定互斥鎖。4.非阻塞的鎖定互斥鎖pthread_mutex_trylock#includeintpthread_mutex_trylock(pthread_mutex_t*mutex);返回值:函數(shù)成功返回0;任何其他返回值都表示錯

6、誤函數(shù)是pthread_mutex_lock函數(shù)的非阻塞版本。如果mutex參數(shù)所指定的互斥鎖已經(jīng)被鎖定的話,調用pthread_mutex_trylock函數(shù)不會阻塞當前線程,而是立即返回一個值來描述互斥鎖的狀況。5.釋放互斥鎖pthread_mutex_destroy#includeintpthread_mutex_destroy(pthread_mutex_t*mp);返回值:函數(shù)成功返回0;任何其他返回值都表示錯誤將相應互斥鎖還原成未初始化狀態(tài),使以后對該互斥鎖的訪問都無效。注意:存儲互斥鎖的內存并未被釋放。6.分級鎖定有時候我們會需要一次訪

7、問兩個資源。也許當你使用一個資源時發(fā)現(xiàn)還需要另外一個資源。當兩個線程試圖同時占用兩個資源,并按不同的次序鎖定相應的互斥鎖時,有可能會產(chǎn)生死鎖。解決這個問題的最好方法是,確保線程鎖定多個互斥鎖時,按同一個順序進行鎖定。這項技術被叫做分級鎖定:為互斥鎖指定邏輯序號并按序號安排鎖定的次序。也就是說,當你鎖定了一個邏輯序號比n大的互斥鎖時,不能再鎖定一個邏輯序號為n的互斥鎖。但在有的情況下,你必須不按預定的順序來鎖定互斥鎖。為了防止這種情況下出現(xiàn)死鎖,可使用pthread_mutex_trylock()函數(shù)。使用這個函數(shù)時注意,當線程

當前文檔最多預覽五頁,下載文檔查看全文

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

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