第14章 多線程編程.ppt_第1頁
第14章 多線程編程.ppt_第2頁
第14章 多線程編程.ppt_第3頁
第14章 多線程編程.ppt_第4頁
第14章 多線程編程.ppt_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第14章 多線程編程,線程的基本概念 線程的基本操作 線程的同步,14.1 線程的基本概念,線程運(yùn)行于進(jìn)程空間之中,它是進(jìn)程內(nèi)部的一個(gè)執(zhí)行單元。同一個(gè)進(jìn)程的多個(gè)線程共享該進(jìn)程所擁有的全部資源,而線程本身基本上不擁有系統(tǒng)資源,只占用一些在運(yùn)行過程中必不可少的資源,包括程序計(jì)數(shù)器、寄存器和棧等。,14.1.1 多線程的意義,多線程的意義主要在于一個(gè)程序之中可以有多個(gè)執(zhí)行單元同時(shí)執(zhí)行,是一種多任務(wù)的、并發(fā)的工作方式,主要表現(xiàn)在以下幾個(gè)方面。 1提高應(yīng)用程序的響應(yīng)速度 2提高多CPU系統(tǒng)的效率,14.1.2 線程與進(jìn)程的比較,線程與進(jìn)程已經(jīng)在很多操作系統(tǒng)類教材中進(jìn)行過詳細(xì)的比較,筆者在此不再贅述,只說

2、明相對(duì)于進(jìn)程,線程所具有的兩個(gè)主要優(yōu)點(diǎn)。 1線程的開銷小,切換快,是一種節(jié)儉的多任務(wù)操作方式 2線程之間的通信機(jī)制更加高效,14.1.3 多線程編程標(biāo)準(zhǔn)與線程庫(kù),目前多線程編程標(biāo)準(zhǔn)主要有三種:WIN32、OS/2和POSIX。他們擁有不同的接口,其中前兩種都是專用的,只能應(yīng)用于他們各自的系統(tǒng)平臺(tái)上,POSIX標(biāo)準(zhǔn)(Portable Operating System Interface of Unix,可移植操作系統(tǒng)接口)最初是為了提高Unix環(huán)境下應(yīng)用程序的可移植性而提出的,現(xiàn)在它已經(jīng)不局限于Unix系統(tǒng),其它許多操作系統(tǒng),如DEC OpenVMS和Microsoft Windows NT,都

3、支持POSIX標(biāo)準(zhǔn),當(dāng)然也包括Linux系統(tǒng)。,14.1.4 Linux的線程機(jī)制,從內(nèi)核的角度來說,Linux系統(tǒng)并沒有線程這個(gè)概念,內(nèi)核也沒有準(zhǔn)備特別的調(diào)度算法或是定義特別的數(shù)據(jù)結(jié)構(gòu)來表征線程,而是把所有的線程都當(dāng)作進(jìn)程來實(shí)現(xiàn)。每一個(gè)線程都擁有惟一隸屬于它的task_struct,在內(nèi)核中它看起來就是一個(gè)普通的進(jìn)程,只是該進(jìn)程和其他一些進(jìn)程共享某一些資源,例如地址空間等。,14.2 線程的基本操作,上一節(jié)中對(duì)線程的基本概念進(jìn)行了詳細(xì)的闡述,從這一節(jié)開始我們將正式步入Linux系統(tǒng)下的多線程編程。首先需要了解是線程的狀態(tài)與操作,如圖所示。,14.2.1 線程的創(chuàng)建,extern int pt

4、hread_create (pthread_t *_restrict _newthread, _const pthread_attr_t *_restrict _attr, void *(*_start_routine) (void *), void *_restrict _arg);,14.2.2 線程的合并,合并兩個(gè)線程所使用的函數(shù)為pthread_join,它的作用是使一個(gè)線程等待另一個(gè)線程結(jié)束,將他們合并在一起。在此過程中,pthread_join函數(shù)會(huì)阻塞調(diào)用它的線程直到指定的線程終止,它類似于前面介紹過的進(jìn)程用來等待子進(jìn)程的wait函數(shù)。 int pthread_join (pth

5、read_t _th, void *_thread_return);,14.2.3 線程的終止,單個(gè)線程可以通過以下幾種方式來終止: 1線程自身調(diào)用pthread_exit函數(shù) 2其他線程調(diào)用pthread_cancel函數(shù),14.2.4 線程的屬性,前面介紹的線程創(chuàng)建和線程取消操作中,都涉及到線程的屬性,這包括取消狀態(tài)與取消類型,這一小節(jié)中我們將對(duì)的另外兩個(gè)比較重要的屬性及其操作函數(shù)進(jìn)行介紹。 線程屬性的數(shù)據(jù)結(jié)構(gòu)為pthread_attr_t,它是一個(gè)聯(lián)合體,定義在頭文件/usr/include/bits/pthreadtypes之中。 int pthread_attr_init (pthr

6、ead_attr_t *_attr) _THROW _nonnull (1); 1線程的分離狀態(tài) int pthread_attr_setdetachstate (pthread_attr_t *_attr, int _detachstate) 2線程的優(yōu)先級(jí),14.2.4 線程的屬性,線程的優(yōu)先級(jí)使用函數(shù)pthread_attr_getschedparam和pthread_attr_setschedparam進(jìn)行存放,這兩個(gè)函數(shù)的定義也是在/usr/include/pthread.h之中。一般情況下,我們總是先讀取優(yōu)先級(jí),對(duì)取得的值進(jìn)行修改,然后再存放回去。,14.3 線程的同步,互斥量 條

7、件變量 信號(hào)量,14.3.1 互斥量,互斥量的數(shù)據(jù)類型為pthread_mutex_t int pthread_mutex_init (pthread_mutex_t *_mutex, _const pthread_mutexattr_t *_mutexattr) int pthread_mutex_destroy (pthread_mutex_t *_mutex) int pthread_mutex_lock (pthread_mutex_t *_mutex) int pthread_mutex_unlock (pthread_mutex_t *_mutex),14.3.2 條件變量,條件變

8、量的數(shù)據(jù)類型為pthread_cond_t int pthread_cond_init (pthread_cond_t *_restrict _cond, _const pthread_condattr_t *_restrict_cond_attr) int pthread_cond_destroy (pthread_cond_t *_cond) int pthread_cond_wait (pthread_cond_t *_restrict _cond, pthread_mutex_t *_restrict _mutex) int pthread_cond_timedwait (pthrea

9、d_cond_t *_restrict _cond, pthread_mutex_t *_restrict _mutex, _const struct timespec *_restrict_abstime),14.3.2 條件變量,int pthread_cond_signal (pthread_cond_t *_cond) int pthread_cond_broadcast (pthread_cond_t *_cond),14.3.3 信號(hào)量,信號(hào)量本質(zhì)上是一個(gè)非負(fù)的整數(shù)計(jì)數(shù)器,它被用來控制對(duì)共享資源的訪問。信號(hào)量的數(shù)據(jù)類型為sem_t,在聲明后必須進(jìn)行初始化,不再需要時(shí)應(yīng)注銷以釋放系統(tǒng)資源,它的初始化和注銷函數(shù)分別為sem_init和sem_destroy, int sem_post (sem_t *_sem) int sem_wait (sem_t *_sem),14.4 常見面試題,常見面試題1:什么是線程?相比于進(jìn)程,主要有哪些優(yōu)點(diǎn)? 常見面試題2:實(shí)現(xiàn)線程間同步主要有哪幾種方法?,14.5 小結(jié),在這一章中,我們對(duì)多線程編程

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論