版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、linux多線程編程Linux下線程概述linux線程實(shí)現(xiàn)1、Linux下線程概述進(jìn)程是系統(tǒng)中程序執(zhí)行和資源分配的基本單位。每個(gè)進(jìn)程有自己的數(shù)據(jù)段、代碼段和堆棧段。線程通常叫做輕型的進(jìn)程。線程是在共享內(nèi)存空間中并發(fā)執(zhí)行的多道執(zhí)行路徑,他們共享一個(gè)進(jìn)程的資源。因?yàn)榫€程和進(jìn)程比起來(lái)很小,所以相對(duì)來(lái)說(shuō),線程花費(fèi)更少的CPU資源。用戶地址空間線程一線程二線程三進(jìn) 程圖1 進(jìn)程與線程的關(guān)系線程按照其調(diào)度者可分為用戶級(jí)線程和內(nèi)核級(jí)線程兩種。(1)用戶級(jí)線程主要解決的是上下文切換的問(wèn)題,其調(diào)度算法和調(diào)度過(guò)程全部有用戶決定。(2)內(nèi)核級(jí)線程有內(nèi)核調(diào)度機(jī)制實(shí)現(xiàn)?,F(xiàn)在大多數(shù)操作系統(tǒng)都采用用戶級(jí)線程和內(nèi)核級(jí)線程并存
2、的方法。用戶級(jí)線程可與內(nèi)核級(jí)線程實(shí)現(xiàn)“一對(duì)一”,“一對(duì)多”的對(duì)應(yīng)關(guān)系。2、linux線程實(shí)現(xiàn)以下線程均為用戶級(jí)線程。在linux中,一般采用Pthread線程庫(kù)實(shí)現(xiàn)線程的訪問(wèn)與控制,由POSIX提出,具有良好的可移植性。2.1 線程創(chuàng)建與退出創(chuàng)建線程使用pthread_create函數(shù)。在線程創(chuàng)建以后,就開(kāi)始運(yùn)行相關(guān)的線程函數(shù)。線程退出時(shí)使用函數(shù)pthread_exit,是線程的主動(dòng)行為。注意進(jìn)程退出時(shí)使用exit函數(shù),線程中用pthread_exit替代exit。由于一個(gè)進(jìn)程中的多個(gè)線程共享數(shù)據(jù)段,因此通常在線程退出后,退出線程所占用的資源并不會(huì)隨線程結(jié)束而釋放。所有需要pthread_jo
3、in函數(shù)來(lái)等待線程結(jié)束,類似于wait系統(tǒng)調(diào)用。創(chuàng)建進(jìn)程:#include pthread_create(pthread_t *thread, pthread_attr_t *attr,void *(*start_routine)(void *),void *arg)thread:線程標(biāo)識(shí)符attr:線程屬性設(shè)置start_routine:線程函數(shù)起始地址arg:傳遞給start_routine的參數(shù)進(jìn)程退出:#include pthread_exit( void *retval )retval: pthread_exit調(diào)用者線程的返回值,可由其他函數(shù)和pthread_join來(lái)檢測(cè)獲取。等
4、待進(jìn)程退出:#include pthread_join( pthread_t *th,void *thread_return )th:等待線程的標(biāo)識(shí)符thread_return:用戶定義指針,用來(lái)存儲(chǔ)被等待線程的返回值線程實(shí)例見(jiàn):thread.c2.2 修改線程屬性在thread_creat函數(shù)中有設(shè)置線程屬性參數(shù),這些屬性包括綁定屬性、分離屬性、堆棧地址、堆棧大小、優(yōu)先級(jí)。系統(tǒng)默認(rèn)屬性為非綁定、非分離、缺省1M的堆棧、與父進(jìn)程同樣級(jí)別的優(yōu)先級(jí)。分別介紹綁定屬性和分離屬性。1、綁定屬性 在linux系統(tǒng)中,可實(shí)現(xiàn)一個(gè)用戶級(jí)線程與一個(gè)內(nèi)核級(jí)線程相對(duì)應(yīng)的“一對(duì)一”線程機(jī)制。綁定屬性是指一個(gè)用戶級(jí)線
5、程固定的分配給一個(gè)內(nèi)核級(jí)線程。非綁定屬性則是指用戶級(jí)線程與內(nèi)核級(jí)線程的關(guān)系不是始終固定的,而是由系統(tǒng)來(lái)控制分配。2、分離屬性 分離屬性是用來(lái)決定一個(gè)線程以什么樣的方式來(lái)終止自己。在非分離情況下,當(dāng)一個(gè)線程結(jié)束時(shí),它所占用的系統(tǒng)資源并沒(méi)有完全釋放,也沒(méi)有真正終止。只有當(dāng)pthread_join()函數(shù)返回時(shí),該線程才釋放自己占用的資源。而在分離情況下,一個(gè)線程結(jié)束時(shí)會(huì)立即釋放它所占用的資源。3、屬性設(shè)置屬性設(shè)置是由一定函數(shù)來(lái)完成的,通常調(diào)用pthread_attr_init函數(shù)進(jìn)行初始化。設(shè)置綁定屬性的函數(shù)為pthread_attr_setscope,設(shè)置分離屬性的函數(shù)是pthread_attr
6、_setdetachstate,設(shè)置線程優(yōu)先級(jí)的相關(guān)函數(shù)pthread_attr_getschdparm(獲取線程優(yōu)先級(jí))和pthread_attr_setschedparam (設(shè)置線程優(yōu)先級(jí))。在設(shè)置完成屬性后,調(diào)用pthread_creat函數(shù)創(chuàng)建線程。線程屬性初始化:#include int pthread_attr_init (pthread_attr_t *attr) attr:線程屬性返回值:成功0,錯(cuò)誤-1。設(shè)置綁定屬性:#include pthread_attr_setscope(pthread_attr_t *attr, init scope)attr:線程屬性scope:
7、PTHREAD_SCOPE_SYSTEM(綁定) PTHREAD_SCOPE_PRCESS(非綁定)返回值:成功0,錯(cuò)誤-1。設(shè)置分離屬性:#include pthread_attr_setsetdetachstate(pthread_attr_t*attr, init detachstate)attr:線程屬性detachstate :PTHREAD_CREAT_DETACHED(分離) PTHREAD_CREAT_JOINABLE(非分離)返回值:成功0,錯(cuò)誤-1。獲取線程優(yōu)先級(jí):#include int pthread_attr_getschedparam (pthread_attr_a
8、ttr *attr,struct sched_param *param)attr:線程屬性param:線程優(yōu)先級(jí)返回值:成功0,錯(cuò)誤-1。設(shè)置線程優(yōu)先級(jí):#include int pthread_attr_setschedparam (pthread_attr_attr *attr,struct sched_param *param)attr:線程屬性param:線程優(yōu)先級(jí)返回值:成功0,錯(cuò)誤-1。線程實(shí)例見(jiàn):pthread.c2.3 mutex互斥鎖線程控制 mutex是一種簡(jiǎn)單的加鎖的方法來(lái)控制對(duì)共享資源的訪問(wèn)。在同一時(shí)刻只能有一個(gè)線程掌握某個(gè)互斥上的鎖,擁有上鎖狀態(tài)的線程能夠?qū)蚕碣Y源進(jìn)
9、行訪問(wèn)。若其他線程希望上鎖一個(gè)已經(jīng)被上了互斥鎖的資源,則該線程掛起,直到上鎖的線程釋放互斥鎖為止?;コ怄i的操作主要包括以下幾個(gè)步驟: 互斥鎖初始化:pthread_mutex_init 互斥鎖上鎖:pthread_mutex_lock 互斥鎖判斷上鎖:pthread_mutex_trylock 互斥鎖解鎖:pthread_mutex_unlock 消除互斥鎖:pthread_mutex_destroy互斥鎖可分為以下三種: 快速互斥鎖: 遞歸互斥鎖: 檢錯(cuò)互斥鎖: 這三種鎖的主要區(qū)別在于其他未占有互斥鎖的線程在希望得到互斥鎖時(shí)是否需要阻塞等待。 快速互斥鎖是指調(diào)用線程會(huì)阻塞直到擁有互斥鎖的線程
10、釋放為止。 遞歸互斥鎖能夠成功返回并且增加調(diào)用線程在互斥上加鎖的次數(shù)。 檢錯(cuò)互斥鎖則為快速互斥鎖的阻塞版本,他會(huì)立即返回并得到一個(gè)錯(cuò)誤。互斥鎖初始化:#include int pthread_mutex_init(pthread_mutex_t *mutex, constpthread_mutex_attr_t *mutexattr)Mutex:互斥鎖Mutexattr:PTHREAD_MUTEX_INITIALIZER:創(chuàng)建快速互斥鎖 PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP:創(chuàng)建遞歸互斥鎖 PTHREAD_REEORCHECK_MUTEX_INITIAL
11、IZER_NP:創(chuàng)建檢錯(cuò)互斥鎖互斥鎖操作: #include int pthread_mutex_lock(pthread_mutex_t *mutex) int pthread_mutex_trylock(pthread_mutex_t *mutex) int pthread_mutex_unlock(pthread_mutex_t *mutex) int pthread_mutex_destroy(pthread_mutex_t *mutex)Mutex:互斥鎖返回值:成功0,錯(cuò)誤-1。互斥鎖實(shí)例見(jiàn):mutex.c2.4 信號(hào)量線程控制信號(hào)量也就是操作系統(tǒng)中所用到的PV操作,它廣泛用于進(jìn)程或線程間的互斥與同步。PV操作是對(duì)整數(shù)計(jì)數(shù)器信號(hào)量sem的操作。一次P操作使sem減一,一次V操作使sem加一。用于互斥時(shí),幾個(gè)進(jìn)程(或線程)往往只設(shè)置一個(gè)信號(hào)量sem。用于同步時(shí),往往設(shè)置多個(gè)信號(hào)量,并安排不同的值了來(lái)實(shí)現(xiàn)它們之間的順序執(zhí)行。開(kāi)始初始化信號(hào)量V操作V操作線程二執(zhí)行線程一執(zhí)行P操作P操作結(jié)束圖2 信號(hào)量互斥操作Linux實(shí)現(xiàn)了POSIX.1的無(wú)名信號(hào)量,用于線程的同步與互斥。信號(hào)量操作函數(shù):sem_init:用于創(chuàng)建一個(gè)信號(hào)量,并初始化它。sem_wa
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 配電設(shè)備改造工程
- 2024年高中語(yǔ)文 第五單元 寫作任務(wù)指導(dǎo)-學(xué)寫演講稿教案 新人教版必修下冊(cè)
- 2024-2025學(xué)年高中數(shù)學(xué) 第五章 三角函數(shù) 5.2.1 三角函數(shù)的概念 第2課時(shí) 三角函數(shù)的性質(zhì)教案 新人教A版必修第一冊(cè)
- 湖南省株洲景炎學(xué)校七年級(jí)地理上冊(cè) 2.3 世界的地形教案 湘教版
- 八年級(jí)生物上冊(cè) 第五單元 第四章 第二節(jié)《細(xì)菌》教案 (新版)新人教版
- 總體交通規(guī)劃設(shè)計(jì)合同(2篇)
- 雨棚使用年限合同(2篇)
- 漢字課件 博客
- 故事坐井觀天課件
- 寒號(hào)鳥(niǎo)課件講解
- 第五節(jié) 錯(cuò)覺(jué)課件
- 2024-2030年中國(guó)水煤漿行業(yè)發(fā)展規(guī)模及投資可行性分析報(bào)告
- 2024-2030年陜西省煤炭行業(yè)市場(chǎng)發(fā)展分析及發(fā)展前景預(yù)測(cè)研究報(bào)告
- 《中華人民共和國(guó)安全生產(chǎn)法》知識(shí)培訓(xùn)
- 高校實(shí)驗(yàn)室安全基礎(chǔ)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 國(guó)開(kāi)2024年《中國(guó)法律史》平時(shí)作業(yè)1-3答案
- 李燕璇植樹(shù)問(wèn)題卡通版5
- 國(guó)家電網(wǎng)公司十八項(xiàng)反措
- 井式爐課程設(shè)計(jì)說(shuō)明書
- 個(gè)人簡(jiǎn)歷模版
- 油浸式變壓器作業(yè)工藝流程圖
評(píng)論
0/150
提交評(píng)論