《Linux體系與編程-基于Linux 0.01版本》課件第9章_第1頁(yè)
《Linux體系與編程-基于Linux 0.01版本》課件第9章_第2頁(yè)
《Linux體系與編程-基于Linux 0.01版本》課件第9章_第3頁(yè)
《Linux體系與編程-基于Linux 0.01版本》課件第9章_第4頁(yè)
《Linux體系與編程-基于Linux 0.01版本》課件第9章_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

9.1什么是線程進(jìn)程指在操作系統(tǒng)中正在運(yùn)行的一個(gè)應(yīng)用程序,線程是操作系統(tǒng)系統(tǒng)分配給處理器時(shí)間資源的基本單元。9.1.1線程的特點(diǎn)1.“節(jié)儉”的多任務(wù)操作方式2.方便的通信機(jī)制3.提高應(yīng)用程序響應(yīng)4.改善程序結(jié)構(gòu)5.數(shù)據(jù)共享問(wèn)題9.1什么是線程9.1.2線程的分類1.用戶線程2.內(nèi)核線程9.2線程編程基礎(chǔ)實(shí)例:pthread.c注意:由于pthread庫(kù)不是Linux系統(tǒng)默認(rèn)的庫(kù),鏈接時(shí)需要使用靜態(tài)庫(kù)libpthread.a,所以在使用pthread_creat

e等pthread_系列函數(shù)時(shí),編譯程序需要加上編譯參數(shù)-lpthread,若不添加則編譯不通過(guò)。例如:gccpthread.c-lpthread9.2線程編程基礎(chǔ)9.2.1創(chuàng)建線程函數(shù)pthread_create函數(shù)用于創(chuàng)建一個(gè)新線程,類似于創(chuàng)建新進(jìn)程的fork函數(shù)。#include<pthread.h>intpthread_create(pthread_t*tid,constpthread_attr_t*attr,void*(*func)(void*),void*arg);9.2線程編程基礎(chǔ)9.2.2等待線程結(jié)束的函數(shù)#include<pthread.h>intpthread_join(pthread_ttid,void**status);這個(gè)函數(shù)用于阻塞線程,調(diào)用這個(gè)函數(shù)的線程將一直等待,到被等待的線程執(zhí)行完為止,當(dāng)函數(shù)返回時(shí),被等待線程的資源被收回。9.2線程編程基礎(chǔ)9.2.3取自己線程ID函數(shù)#include<pthread.h>pthread_tpthread_self(void);線程ID可以由pthread_creat函數(shù)的第一個(gè)參數(shù)返回,也可以用pthread_self函數(shù)在自己的線程內(nèi)部取得本線程的ID。9.2線程編程基礎(chǔ)9.2.4終止線程函數(shù)#include<pthread.h>voidpthread_exit(void*retval);一般結(jié)束一個(gè)線程有兩種途徑:一種是線程的執(zhí)行函數(shù)結(jié)束了(由pthread_create函數(shù)的第三個(gè)參數(shù)和第四個(gè)參數(shù)確定的函數(shù)),調(diào)用它的線程也就結(jié)束了;另一種方式是通過(guò)函數(shù)pthread_exit來(lái)實(shí)現(xiàn)。9.3線程屬性線程屬性封裝在結(jié)構(gòu)體pthread_attr_t中,該結(jié)構(gòu)體在頭文件/usr/include/bits/pthreadtypes.h中定義。如下:typedefstruct__pthread_attr_s{

int

__detachstate;//是否分離

int

__schedpolicy;//調(diào)度策略

struct__sched_param__schedparam;//線程的運(yùn)行優(yōu)先級(jí)

int

__inheritsched;//顯式指定還是繼承調(diào)度策略和調(diào)度參數(shù)

int

__scope;//表示線程間競(jìng)爭(zhēng)CPU的范圍,也就是說(shuō)線程優(yōu)先級(jí)的有效范圍

size_t

__guardsize;

int

__stackaddr_set;

void

*__stackaddr; //線程棧的位置

size_t

__stacksize; //線程棧的大小}pthread_attr_t;9.3線程屬性1.線程屬性初始化#include<pthread.h>intpthread_attr_init(pthread_attr_t*attr);可以通過(guò)pthread_attr_init函數(shù)初始化一個(gè)線程屬性對(duì)象,調(diào)用pthread_attr_init函數(shù)之后,pthread_attr_t結(jié)構(gòu)所包含的內(nèi)容就是操作系統(tǒng)支持的線程所有屬性的默認(rèn)值。2.是否分離intpthread_attr_setdetachstate(pthread_attr_t*attr,intdetachstate);intpthread_attr_getdetachstate(constpthread_attr_t*attr,int*detachstate);9.3線程屬性2.是否分離可以通過(guò)pthread_attr_setdetachstate函數(shù)把線程屬性__detachstate設(shè)置為PTHREAD_CREATE_DETACHED狀態(tài)即以分離狀態(tài)啟動(dòng)線程,不讓主線程等待它的結(jié)束,即不能再調(diào)用pthread_join()來(lái)同步,在退出時(shí)自行釋放所占用的資源。3.調(diào)度策略4.優(yōu)先級(jí)5.繼承性6.優(yōu)先級(jí)范圍綜合實(shí)例pthreadattributes.c9.4線程訪問(wèn)控制1.互斥量#include<pthread.h>intpthread_attr_init(pthread_attr_t*attr);mutex互斥量可以用于控制線程的同步,它允許程序員對(duì)某個(gè)對(duì)象上鎖,使得只能有一個(gè)線程訪問(wèn)這個(gè)對(duì)象。若有其他的線程想要訪問(wèn)已經(jīng)上了鎖的對(duì)象(或稱為想要對(duì)已經(jīng)上了鎖的對(duì)象進(jìn)行上鎖操作),則該線程會(huì)被掛起,直到上鎖的線程釋放互斥量為止。9.4線程訪問(wèn)控制1.互斥量1)創(chuàng)建和銷毀有兩種方法可以創(chuàng)建互斥量:靜態(tài)方式和動(dòng)態(tài)方式??梢酝ㄟ^(guò)pthread_mutex_destroy()注銷一個(gè)互斥量。2)鎖操作。鎖操作主要包括加鎖pthread_mutex_lock()、解鎖pthread_mutex_unlock()和測(cè)試加鎖pthread_mutex

_trylock()三個(gè),互斥量不可能被兩個(gè)不同的線程同時(shí)使用,一個(gè)互斥量必須等待解鎖后才能繼續(xù)使用。

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論