07_Linux多線程

07_Linux多線程

ID:37832412

大?。?05.50 KB

頁數(shù):25頁

時(shí)間:2019-06-01

07_Linux多線程_第1頁
07_Linux多線程_第2頁
07_Linux多線程_第3頁
07_Linux多線程_第4頁
07_Linux多線程_第5頁
資源描述:

《07_Linux多線程》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、Linux教程作者:王嘯LINUX多線程1.Linux多線程概述1.1.概述進(jìn)程是系統(tǒng)中程序執(zhí)行和資源分配的基本單位。每個進(jìn)程有自己的數(shù)據(jù)段、代碼段和堆棧段。這就造成進(jìn)程在進(jìn)行切換等操作時(shí)都需要有比較負(fù)責(zé)的上下文切換等動作。為了進(jìn)一步減少處理器的空轉(zhuǎn)時(shí)間支持多處理器和減少上下文切換開銷,也就出現(xiàn)了線程。線程通常叫做輕量級進(jìn)程。線程是在共享內(nèi)存空間中并發(fā)執(zhí)行的多道執(zhí)行路徑,是一個更加接近于執(zhí)行體的概念,擁有獨(dú)立的執(zhí)行序列,是進(jìn)程的基本調(diào)度單元,每個進(jìn)程至少都有一個main線程。它與同進(jìn)程中的其他線程共享進(jìn)程空間{堆代碼數(shù)據(jù)文件描述符信號等},只擁有自己的

2、??臻g,大大減少了上下文切換的開銷。線程和進(jìn)程在使用上各有優(yōu)缺點(diǎn):線程執(zhí)行開銷小,占用的CPU少,線程之間的切換快,但不利于資源的管理和保護(hù);而進(jìn)程正相反。從可移植性來講,多進(jìn)程的可移植性要好些。同進(jìn)程一樣,線程也將相關(guān)的變量值放在線程控制表內(nèi)。一個進(jìn)程可以有多個線程,也就是有多個線程控制表及堆棧寄存器,但卻共享一個用戶地址空間。要注意的是,由于線程共享了進(jìn)程的資源和地址空間,因此,任何線程對系統(tǒng)資源的操作都會給其他線程帶來影響。1.2.線程分類按調(diào)度者分為用戶級線程和核心級線程·用戶級線程:主要解決上下文切換問題,調(diào)度算法和調(diào)度過程全部由用戶決定,在

3、運(yùn)行時(shí)不需要特定的內(nèi)核支持。缺點(diǎn)是無法發(fā)揮多處理器的優(yōu)勢·核心級線程:允許不同進(jìn)程中的線程按照同一相對優(yōu)先調(diào)度方法調(diào)度,發(fā)揮多處理器的并發(fā)優(yōu)勢現(xiàn)在大多數(shù)系統(tǒng)都采用用戶級線程和核心級線程并存的方法。一個用戶級線程可以對應(yīng)一個或多個核心級線程,也就是“一對一”或“一對多”模型。25Linux教程作者:王嘯1.1.線程創(chuàng)建的Linux實(shí)現(xiàn)Linux的線程是通過用戶級的函數(shù)庫實(shí)現(xiàn)的,一般采用pthread線程庫實(shí)現(xiàn)線程的訪問和控制。它用第3方posix標(biāo)準(zhǔn)的pthread,具有良好的可移植性。編譯的時(shí)候要在后面加上–lpthread創(chuàng)建退出等待多進(jìn)程fork(

4、)exit()wait()多線程pthread_createpthread_exit()pthread_join()2.線程的創(chuàng)建和退出創(chuàng)建線程實(shí)際上就是確定調(diào)用該線程函數(shù)的入口點(diǎn),線程的創(chuàng)建采用函數(shù)pthread_create。在線程創(chuàng)建以后,就開始運(yùn)行相關(guān)的線程函數(shù),在該函數(shù)運(yùn)行完之后,線程就退出,這也是線程退出的一種方式。另一種線程退出的方式是使用函數(shù)pthread_exit()函數(shù),這是線程主動退出行為。這里要注意的是,在使用線程函數(shù)時(shí),不能隨意使用exit退出函數(shù)進(jìn)行出錯處理,由于exit的作用是使調(diào)用進(jìn)程終止,往往一個進(jìn)程包括了多個線程,所

5、以在線程中通常使用pthread_exit函數(shù)來代替進(jìn)程中的退出函數(shù)exit。由于一個進(jìn)程中的多個線程是共享數(shù)據(jù)段的,因此通常在線程退出之后,退出線程所占用的資源并不會隨著線程的終止而得到釋放。正如進(jìn)程之間可以通過wait()函數(shù)系統(tǒng)調(diào)用來同步終止并釋放資源一樣,線程之間也有類似的機(jī)制,那就是pthread_join函數(shù)。pthread_join函數(shù)可以用于將當(dāng)前線程掛起,等待線程的結(jié)束。這個函數(shù)是一個線程阻塞函數(shù),調(diào)用它的函數(shù)將一直等待直到被等待的線程結(jié)束為止,當(dāng)函數(shù)返回時(shí),被等待線程的資源被回收。函數(shù)原型:#includein

6、tpthread_create(pthread_t*thread,pthread_attr_t*attr,void*(*start_routine)(void*),void*arg);voidpthread_exit(void*retval);通常的形式為:pthread_tpthid;pthread_create(&pthid,NULL,pthfunc,NULL);或pthread_create(&pthid,NULL,pthfunc,(void*)3);pthread_exit(NULL);或pthread_exit((void*)3);//3作為

7、返回值被pthread_join函數(shù)捕獲。函數(shù)pthread_create用來創(chuàng)建線程。返回值:成功,則返回0;失敗,則返回-1。各參數(shù)描述如下:·參數(shù)thread是傳出參數(shù),保存新線程的標(biāo)識;·參數(shù)attr是一個結(jié)構(gòu)體指針,結(jié)構(gòu)中的元素分別指定新線程的運(yùn)行屬性,attr可以用pthread_attr_init等函數(shù)設(shè)置各成員的值,但通常傳入為NULL?即可;·參數(shù)start_routine是一個函數(shù)指針,指向新線程的入口點(diǎn)函數(shù),線程入口點(diǎn)函數(shù)帶有一個void*的參數(shù)由pthread_create的第4個參數(shù)傳入;·參數(shù)arg用于傳遞給第3個參數(shù)指向的

8、入口點(diǎn)函數(shù)的參數(shù),可以為NULL,表示不傳遞。函數(shù)pthread_exit表示線程的退出。其參

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

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

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