linux多線程機(jī)制線程同步

linux多線程機(jī)制線程同步

ID:39465618

大?。?8.00 KB

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

時(shí)間:2019-07-04

linux多線程機(jī)制線程同步_第1頁(yè)
linux多線程機(jī)制線程同步_第2頁(yè)
linux多線程機(jī)制線程同步_第3頁(yè)
linux多線程機(jī)制線程同步_第4頁(yè)
linux多線程機(jī)制線程同步_第5頁(yè)
資源描述:

《linux多線程機(jī)制線程同步》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。

1、linux多線程機(jī)制線程同步1.引言  目前,許多流行的多任務(wù)操作系統(tǒng)都提供線程機(jī)制,線程就是程序中的單個(gè)順序控制流。利用多線程進(jìn)行程序設(shè)計(jì),就是將一個(gè)程序(進(jìn)程)的任務(wù)劃分為執(zhí)行的多個(gè)部分(線程),每一個(gè)線程為一個(gè)順序的單控制流,而所有線程都是并發(fā)執(zhí)行的,這樣,多線程程序就可以實(shí)現(xiàn)并行計(jì)算,高效利用多處理器。線程可分為用戶級(jí)線程和內(nèi)核級(jí)線程兩種基本類型。用戶級(jí)線程不需要內(nèi)核支持,可以在用戶程序中實(shí)現(xiàn),線程調(diào)度、同步與互斥都需要用戶程序自己完成。內(nèi)核級(jí)線程需要內(nèi)核參與,由內(nèi)核完成線程調(diào)度并提供相應(yīng)的系統(tǒng)調(diào)用,用戶程序可以通過這些接口函數(shù)對(duì)線程進(jìn)行一定的

2、控制和管理。Linux操作系統(tǒng)提供了LinuxThreads庫(kù),它是符合POSIX1003.1c標(biāo)準(zhǔn)的內(nèi)核級(jí)多線程函數(shù)庫(kù)。在linuxthreads庫(kù)中提供了一些多線程編程的關(guān)鍵函數(shù),在多線程編程時(shí)應(yīng)包括pthread.h文件?! ?.LinuxThread中的關(guān)鍵庫(kù)函數(shù)  2.1線程的創(chuàng)建和終止  intpthread_create(pthread_t*pthread,constpthread_attr_t*attr,void*(*start_routine(*void)),void*arg);調(diào)用此函數(shù)可以創(chuàng)建一個(gè)新的線程,新線程創(chuàng)建后執(zhí)行star

3、t_routine指定的程序。其中參數(shù)attr是用戶希望創(chuàng)建線程的屬性,當(dāng)為NULL時(shí)表示以默認(rèn)的屬性創(chuàng)建線程。arg是向start_routine傳遞的參數(shù)。當(dāng)成功創(chuàng)建一個(gè)新的線程時(shí),系統(tǒng)會(huì)自動(dòng)為新線程分配一個(gè)線程ID號(hào),并通過pthread返回給調(diào)用者?! oidpthread_exit(void*value_ptr);調(diào)用該函數(shù)可以退出線程,參數(shù)value_ptr是一個(gè)指向返回狀態(tài)值的指針?! ?.2線程控制函數(shù)  pthread_self(void);為了區(qū)分線程,在線程創(chuàng)建時(shí)系統(tǒng)為其分配一個(gè)唯一的ID號(hào),由pthread_create()返

4、回給調(diào)用者,也可以通過pthread_self()獲取自己的線程ID?! ntpthread_join(pthread-tthread,void**status);這個(gè)函數(shù)的作用是等待一個(gè)線程的結(jié)束。調(diào)用pthread_join()的線程將被掛起直到線程ID為參數(shù)thread指定的線程終止。  intpthread_detach(pthread_tpthread);參數(shù)pthread代表的線程一旦終止,立即釋放調(diào)該線程占有的所有資源?! ?.3線程間的互斥  互斥量和臨界區(qū)類似,只有擁有互斥量的線程才具有訪問資源的權(quán)限,由于互斥對(duì)象只有一個(gè),這就決定

5、了任何情況下共享資源(代碼或變量)都不會(huì)被多個(gè)線程同時(shí)訪問。使用互斥不僅能夠在同一應(yīng)用程序的不同線程中實(shí)現(xiàn)資源的安全共享,而且可以在不同應(yīng)用程序的線程之間實(shí)現(xiàn)對(duì)資源的安全共享。Linux中通過pthread_mutex_t來(lái)定義互斥體機(jī)制完成互斥操作。具體的操作函數(shù)如下  pthread_mutex_init(pthread_mutex_t*mutex,constpthread_mutexattr_t*attr);初使化一個(gè)互斥體變量mutex,參數(shù)attr表示按照attr屬性創(chuàng)建互斥體變量mutex,如果參數(shù)attr為NULL,則以默認(rèn)的方式創(chuàng)建?!?/p>

6、 pthread_mutex_lock(pthread_mutex_t*mutex);給一個(gè)互斥體變量上鎖,如果mutex指定的互斥體已經(jīng)被鎖住,則調(diào)用線程將被阻塞直到擁有mutex的線程對(duì)mutex解鎖為止?! thread_mutex_unlock(pthread_mutex_t*mutex);對(duì)參數(shù)mutex指定的互斥體變量解鎖?! ?.4線程間的同步  同步就是線程等待某一個(gè)事件的發(fā)生,當(dāng)?shù)却氖录l(fā)生時(shí),被等待的線程和事件一起繼續(xù)執(zhí)行。如果等待的事件未到達(dá)則掛起。在linux操作系統(tǒng)中是通過條件變量來(lái)實(shí)現(xiàn)同步的。  Pthread_cond

7、_init(pthread_cond_t*cond,constpthread_cond_t*attr);這個(gè)函數(shù)按參數(shù)attr指定的屬性初使化一個(gè)條件變量cond?! thread_cond_wait(pthread_cond_t*cond,pthread_mutex_t*mutex);等待一個(gè)事件(條件變量)的發(fā)生,發(fā)出調(diào)用的線程自動(dòng)阻塞,直到相應(yīng)的條件變量被置1。等待狀態(tài)的線程不占用CPU時(shí)間?! thread_cond_signal(pthread_cond_t*cond);解除一個(gè)等待參數(shù)cond指定的條件變量的線程的阻塞狀態(tài)。3.多線程編

8、程的應(yīng)用實(shí)例  在這里利用多線程技術(shù)實(shí)現(xiàn)生產(chǎn)者和消費(fèi)者問題,生產(chǎn)者線程向一緩沖區(qū)中寫數(shù)據(jù),消費(fèi)

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

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

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問題,請(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)系客服處理。