版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第8章開發(fā)多進程/線程程序8.1
多進程開發(fā)8.2
多線程開發(fā)8.1
多進程開發(fā)8.1.1
什么是進程8.1.2
進程環(huán)境和屬性8.1.3
創(chuàng)建進程8.1.4
等待進程結(jié)束8.1.5
退出進程8.1.6
常用進程間通信的方法8.1.7
進程編程實例8.1.1
什么是進程進程就是一個正在運行的程序。當(dāng)運行可
執(zhí)行文件以后,操作系統(tǒng)會執(zhí)行文件中的
代碼,在CPU上運行的這組代碼被稱做進
程。一個進程不僅包含了正在運行的代碼,也包括了運行代碼所需要的資源(包括用
戶用到的資源和操作系統(tǒng)需要用的資源)。8.1.2
進程環(huán)境和屬性大多數(shù)UNIX系統(tǒng)的main()函數(shù)定義如下:int
main(int
argc,
char
*argv[],
char
*envp[]);POSIX標(biāo)準規(guī)定使用一個全局的環(huán)境變量
environ取代了參數(shù)envp,應(yīng)用程序可以通過getenv()和putenv()函數(shù)讀取或設(shè)定一個環(huán)境變量。
getenv()函數(shù)定義如下:#include<stdlib.h>char
*getenv(const
char
*name);8.1.3
創(chuàng)建進程Linux系統(tǒng)通過fork()系統(tǒng)調(diào)用創(chuàng)建一個進程,fork()函數(shù)定義如下:#include<sys/types.h>#include<unistd.h>pid_tfork(void);8.1.4
等待進程結(jié)束Linux系統(tǒng)提供給了一個waitpid()函數(shù),它的作用是等待另外一個進程結(jié)束,函數(shù)定義如下:#include<sys/types.h>#include<sys/wait.h>pid_t
waitpid(pid_t
pid,
int
*status,
intoptions);8.1.5
退出進程exit()函數(shù)的作用是退出當(dāng)前進程,并且盡可能釋放當(dāng)前進程占用的資源。_exit()函數(shù)作用也是退出當(dāng)前進程,但是并不試圖釋放進程占用的資源。atexit()函數(shù)和on_exit()函數(shù)的作用都是為程序退出時指定調(diào)用用戶的代碼#include
<stdlib.h>int
atexit(void
(*function)(void));int
on_exit(void
(*function)(int
,
void
*),
void
*arg);void
exit(int
status);#include
<unistd.h>void
_exit(int
status);8.1.6
常用進程間通信的方法Linux提供了多種進程間通信的方法,常見的包括管道、FIFO、消息隊列、信號量、共享內(nèi)存以及通過socket也可以實現(xiàn)不同進程間的通信。本節(jié)將簡述管道和共享內(nèi)存這兩種進程間的通信方法。1.管道2.共享內(nèi)存1.管道所有的UNIX系統(tǒng)都支持管道。管道就好像日常的水管一樣,在兩個進程之間,用來傳送數(shù)據(jù)。進程間的管道有兩個限制:一個是管道是半雙工的;另一個是管道只能在有共同父進程的進程間使用。2.共享內(nèi)存共享內(nèi)存是在內(nèi)存中開辟一段空間,供不同的進程訪問。與管道相比,共享內(nèi)存不僅能在多個不同進程(非父子進程)間共享數(shù)據(jù),而且可以比管道傳送更大量的數(shù)據(jù)。8.1.7
進程編程實例在本節(jié)的最后,給出一個多進程編程的綜合實例,程序會創(chuàng)建兩個進程,在父進程和子進程之間通過管道傳遞數(shù)據(jù),父進程向子進程發(fā)送字符串exit表示讓子進程退
出,并且等待子進程返回;子進程查詢管道,當(dāng)從管道讀出字符串exit的時候結(jié)束。8.2
多線程開發(fā)8.2.1
線程的概念8.2.2
進程和線程對比8.2.3
創(chuàng)建線程8.2.4
取消線程8.2.5
等待線程8.2.6
使用pthread庫線程操作實例8.2.1
線程的概念線程是一種輕量級的進程。線程沒有系統(tǒng)資源。線程是操作系統(tǒng)調(diào)度的最小單位。在操作系統(tǒng)內(nèi)核中,是按照線程作為調(diào)度單位來調(diào)度資源的。在一個進程內(nèi)部,多個線程之間的資源是共享的。8.2.2
進程和線程對比進程和線程有許多相似之處,但是也有許多不同:資源分配不同工作效率不同執(zhí)行方式不同8.2.3
創(chuàng)建線程Linux系統(tǒng)開發(fā)多線程程序大多使用pthread庫。pthread庫對線程操作的函數(shù)基本都以
pthread開頭,創(chuàng)建線程的函數(shù)定義如下:#include
<pthread.h>int
pthread_create(pthread_t
*restrict
thread,const
pthread_attr_t
*restrict
attr,void
*(*start_routine)(void*),
void
*restrictarg);8.2.4
取消線程線程的退出有幾種條件,當(dāng)線程本身的代碼運行結(jié)束后,會自動退出;或者線程代碼中調(diào)用return也會導(dǎo)致線程退出;還有一種情況是通過其他的線程把一個線程退出,pthread庫提供了pthread_cancel()函數(shù)用來取消一個線程的執(zhí)行。#include<pthread.h>int
pthread_cancel(pthread_t
thread);8.2.5
等待線程在線程操作實例中,主線程使用sleep()函數(shù)暫停自己的運行,等待新創(chuàng)建的線程結(jié)束。pthread庫提供了一種等待其他線程結(jié)束的方法,使用pthread_join()函數(shù)等待一個線程結(jié)束,函數(shù)定義如下:#include<pthread.h>int
pthread_join(pthread_t
thread,
void**value_ptr);8.2.6
使用pthread庫線程操作實例本節(jié)最后給出一個多線程操作實例,在主程序中創(chuàng)建兩個線程mid_t
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度科研儀器租賃及技術(shù)服務(wù)合同
- 2024年定制:5G網(wǎng)絡(luò)技術(shù)研發(fā)與技術(shù)服務(wù)合同
- 2024合作開發(fā)合同的開發(fā)內(nèi)容和合作方式
- 04版加工承攬合同生產(chǎn)工藝與質(zhì)量控制
- 2024年度校園租賃:電動自行車合同
- 2024光電子技術(shù)研發(fā)與生產(chǎn)合同
- 2024廣州市勞動合同范文新版
- 2024營業(yè)租賃合同范文
- 2024年度電力設(shè)備安裝與維護合同
- 2024年度計算機軟件開發(fā)與銷售合同
- 皮膚牽引護理技術(shù)操作流程及評分標(biāo)準
- 小學(xué)數(shù)學(xué)說課課件
- 劍橋英語PET真題校園版
- Python程序設(shè)計分支結(jié)構(gòu)
- 中鹽青海昆侖堿業(yè)有限公司柯柯鹽礦礦山地質(zhì)環(huán)境保護與土地復(fù)墾方案
- 安全操作規(guī)程評審報告
- 起重電磁吸盤安全操作規(guī)程
- 監(jiān)理檢測與試驗儀器設(shè)備一覽表實用文檔
- 部編版五年級上冊第二單元《習(xí)作“漫畫”老師》一等獎創(chuàng)新教案
- 醫(yī)院影像科醫(yī)療安全不良事件報告制度
- 2023年初中部漢語聽寫大賽題庫
評論
0/150
提交評論