版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1第三章、進(jìn)程管理
3.1 進(jìn)程的概念3.2 進(jìn)程的描述3.3 進(jìn)程狀態(tài)及其轉(zhuǎn)換3.4 進(jìn)程控制3.5 進(jìn)程互斥3.6 進(jìn)程同步3.7 進(jìn)程通信3.8 死鎖問(wèn)題3.9 線(xiàn)程23.7 進(jìn)程通信一、進(jìn)程通信:
進(jìn)程之間的信息交換、數(shù)據(jù)傳送。
低級(jí)通信:少量控制信息的交換,一個(gè)/幾個(gè)字節(jié)。
高級(jí)通信:高效、大量地傳送數(shù)據(jù),交換信息。二、進(jìn)程通信方式:1、主從式:(終端控制進(jìn)程與終端進(jìn)程)
1)主進(jìn)程可自由使用從進(jìn)程的資源和數(shù)據(jù);
2)從進(jìn)程動(dòng)作受主進(jìn)程控制;
3)主、從進(jìn)程的關(guān)系固定。2、會(huì)話(huà)式:(用戶(hù)進(jìn)程與磁盤(pán)管理進(jìn)程)
1)使用進(jìn)程要得到服務(wù)進(jìn)程的許可;
2)服務(wù)進(jìn)程自控地完成對(duì)使用進(jìn)程的服務(wù);
3)通信時(shí)二者有固定的連接關(guān)系。33、共享存儲(chǔ)區(qū)方式:(UNIXSystemV)
在存儲(chǔ)區(qū)中劃出一塊共享存儲(chǔ)區(qū),兩個(gè)進(jìn)程通過(guò)對(duì)申請(qǐng)的共享存儲(chǔ)區(qū)讀、寫(xiě)實(shí)現(xiàn)通信。4、消息或郵箱機(jī)制:
1)發(fā)送進(jìn)程和接收進(jìn)程之間有用于存放傳送消息的緩沖區(qū)或郵箱;
2)發(fā)送進(jìn)程向空緩沖區(qū)或郵箱發(fā)送信息,接收進(jìn)程從滿(mǎn)緩沖區(qū)或郵箱接收信息;
3)發(fā)送進(jìn)程和接收進(jìn)程之間沒(méi)有直接固定的聯(lián)系。4三、消息緩沖機(jī)制:(直接通信方式,多對(duì)一)消息緩沖區(qū): 進(jìn)程通信的基本單位,記錄消息的內(nèi)容等信息,為多個(gè)進(jìn)程共享,其數(shù)據(jù)結(jié)構(gòu)描述為:
TYPEmessagebuffer=record
sender_ptr; 指向發(fā)送進(jìn)程的指針
size; 消息長(zhǎng)度
text; 消息正文
next_ptr; 指向下一個(gè)消息緩沖區(qū)的指針
end56公用信號(hào)量mutex:對(duì)消息緩沖區(qū)的的訪(fǎng)問(wèn)采取互斥措施;
私有信號(hào)量Sm:消息緩沖區(qū)無(wú)消息時(shí),接收進(jìn)程不能接收,同步措施。發(fā)送進(jìn)程:Send(k,m)begin
向系統(tǒng)申請(qǐng)一個(gè)消息緩沖區(qū)
將發(fā)送消息m送到新消息緩沖區(qū) 把緩沖區(qū)鏈入接收進(jìn)程k的消息隊(duì)列
end接收進(jìn)程:Receive(n)begin
摘下消息隊(duì)列中消息n
把n復(fù)制到接收區(qū) 釋放消息緩沖區(qū)
end
P(mutex)
V(mutex) V(Sm)
P(Sm) P(mutex)
V(mutex)7四、郵箱通信:(間接通信方式,靈活)郵箱:發(fā)送進(jìn)程和接收進(jìn)程之間設(shè)置的大小固定的私有數(shù)據(jù)結(jié)構(gòu)(多個(gè)消息組成的隊(duì)列),由接收進(jìn)程所擁有。工作條件:發(fā)送至少有一個(gè)空格,接收時(shí)至少有一個(gè)滿(mǎn)格。特點(diǎn):發(fā)送、接收基本無(wú)時(shí)間限制。缺點(diǎn):占用大量?jī)?nèi)存,接口多,效率低。(公用信箱)8同步措施:設(shè)置一對(duì)私有信號(hào)量,記錄郵箱中空格滿(mǎn)格的數(shù)量Deposit(m)beginlocalx
選擇郵箱的一個(gè)空格x
把消息m放入空格x
置格x為滿(mǎn)標(biāo)志
end
Remove(m)beginlocalx
選擇郵箱的一個(gè)滿(mǎn)格x
取走消息m
置格x為空標(biāo)志
endP(formnum)V(mesnum)P(mesnum)V(formnum)9實(shí)例1:管道P66
以比特流方式傳送消息的通信管道,由文件系統(tǒng)的高速緩沖區(qū)構(gòu)成。10例:創(chuàng)建管道,父子進(jìn)程通過(guò)管道傳遞數(shù)據(jù)。#include<stdio.h>main(){intx,fd[2];charbuf[30],s[30];
pipe(fd);while((x=fork())==-1);if(x==0){sprintf(buf,"thisisanexample!");
write(fd[1],buf,30);
exit(0);}else{wait(0);
read(fd[0],s,30);printf("result:%s",s);}}11實(shí)例2:書(shū)例P1541、接收消息程序client.c2、發(fā)送消息程序server.c3、在msg.c中,創(chuàng)建三個(gè)子進(jìn)程:其中兩個(gè)調(diào)用client.c
另一個(gè)調(diào)用server.c
相互之間發(fā)送消息12接收消息程序client.c#include<sys/types.h>#include<sys/ipc.h>#include<sys/msg.h>#defineMSGKEY75structmsgform{longmtype;charmtext[256];};main(intargc,char*argv[]){structmsgformmsg;intmsgqid,pid,*pint;
msgqid=msgget(MSGKEY,0777|IPC_CREAT);printf("msgqid=%d\n\n",msgqid);pid=getpid();pint=(int*)msg.mtext;*pint=pid;msg.mtype=1;
msgsnd(msgqid,&msg,sizeof(int),0);
msgrcv(msgqid,(structmsgform)&msg,sizeof(msg),pid,0);pint=(int*)msg.mtext;pid=(int)*pint;printf("Client%s:receivefromServerprocess%d\n",argv[1],pid);}13發(fā)送消息程序server.c--1#include<sys/types.h>#include<sys/ipc.h>#include<sys/msg.h>#defineMSGKEY75structmsgform{longmtype;charmtext[256];};intmsgqid;main(){structmsgformmsg;inti,*pint;intpid;externcleanup();for(i=0;i<20;i++)signal(i,cleanup);
msgqid=msgget(MSGKEY,0777|IPC_CREAT);printf("msgqid=%d\n\n",msgqid);
14發(fā)送消息程序server.c--2for(;;){msgrcv(msgqid,(structmsgform*)&msg,256,1,0);pint=(int*)msg.mtext;pid=(int)*pint;printf("Server:receivefromClientprocess%d\n\n",pid);msg.mtype=pid;pint=(int*)msg.mtext;*pint=getpid();
msgsnd(msgqid,&msg,sizeof(int),0);}cleanup(){msgctl(msgqid,IPC_RMID,0);exit();}15msg.c#include<sys/types.h>#include<stdio.h>#include<unistd.h>main(){intpid1,pid2,pid3;pid1=vfork();if(pid1==0)/*子進(jìn)程2001*/
{printf("\nClient1process%4d:\n",getpid());execlp("/…/client","client","1",NULL);}else{pid2=vfork();if(pid2==0)/*子進(jìn)程2002*/
{printf("Client2process%4d:\n",getpid());execlp("/…/client","client","2",NULL);}
else{pid3=vfork();if(pid3==0)/*子進(jìn)程2000*/
{printf("Server3process%4d:\n",getpid());
execlp("/…/server","server",NULL);
}
else
{printf("\nThisisParentprocess%4d!\n",
getpid());
}
}
}
wait(0);
wait(0);
wait(0);
}16子進(jìn)程2001子進(jìn)程2002子進(jìn)程2000TYPE:1TEXT:2001TYPE:1TEXT:2002TYPE:
2001TEXT:
2000TYPE:
2002TEXT:
2000消息隊(duì)列書(shū)例P16317實(shí)例3:和控制臺(tái)的通信i18①用戶(hù)進(jìn)程PiCCP的接口用戶(hù)進(jìn)程發(fā)出問(wèn)題:P_write(m)Begin
P(rq)
把m插入RQ隊(duì)列
V(rq)
V(question)EndCCP接收問(wèn)題:U_receive(m)Begin
P(question)
P(rq)
把m從RQ隊(duì)列取出
V(rq)End19②
CCP與DCP的接口CCP向outbuf送問(wèn)題:
outbuf_empty=1Write(y)Begin
P(outbuf_empty) copy(outbuffromy)
V(outbuf_full)EndDCP從outbuf中接收:
outbuf_full=0Receive(k)Begin
P(outbuf_full) copy(outbuftok)
V(outbuf_empty)End20③
DCP與顯示器的通信顯示器控制進(jìn)程DCP:
D_busy=1初始化{清除outbuf,echo=false}Beginif(outbuf滿(mǎn))then
receive(k)
P(D_busy)
把k送入顯示器數(shù)據(jù)緩沖區(qū)
V(D_ready)else echo=true
echobuf中字符置入顯示器緩沖區(qū)fiEnd顯示器動(dòng)作DP:
D_ready=0Repeat if(echo=true)then
打印顯示器緩沖區(qū)中字符
else
P(D_ready)
打印顯示器緩沖區(qū)中消息
V(D_busy)Until(顯示器關(guān)機(jī))21④
KCP與鍵盤(pán)的通信鍵盤(pán)控制進(jìn)程KCP:
T_busy=1初始化{清除inbuf、echobuf}Begin
P(T_ready)
從鍵盤(pán)數(shù)據(jù)緩沖區(qū)x中取出字符x.m
Send(x.m)
將x.m送入echobuf
V(T_busy)End鍵盤(pán)動(dòng)作KP:
T_ready=0Repeat
P(T_busy)
把鍵入字符送入鍵盤(pán)數(shù)據(jù)緩沖區(qū)x
V(T_ready)Until(終端關(guān)閉)22⑤
CCP與KCP的接口KCP向inbuf送回答:
inbuf_empty=1Send(k)Begin
P(inbuf_empty) copy(inbuffromk)
V(inbuf_full)EndCCP從inbuf中接收回答:
inbuf_full=0Read(x)Begin
P(inbuf_full) copy(inbuftox)V(inbuf_empty)End23⑥
CCP用戶(hù)進(jìn)程Pi的接口CCP發(fā)出回答:S_answer(a,i)Begin
P(sqi)
把a(bǔ)插入SQi隊(duì)列
V(sqi)
V(answeri)End用戶(hù)進(jìn)程接收回答:P_read(a)Begin
P(answeri)
P(sqi)
把a(bǔ)從SQi隊(duì)列取出
V(sqi)
End24會(huì)話(huà)控制進(jìn)程CCP的動(dòng)作描述Localk,m,xRepeat
U_receive(m)
將消息m的進(jìn)程標(biāo)號(hào)置入k中 將消息m解碼變換到x
write(x)
read(x)
將x編碼到m
S_answer(m,k)Until(CCP結(jié)束)253.8 死鎖問(wèn)題一、死鎖的定義
指多個(gè)進(jìn)程因競(jìng)爭(zhēng)資源而造成的僵局,即各自等待對(duì)方的資源,而在得到對(duì)方資源前又不會(huì)釋放自己擁有的資源,在無(wú)外力作用下,各進(jìn)程將永遠(yuǎn)不能向前推進(jìn)。26二、死鎖的起因1、資源競(jìng)爭(zhēng): 可剝奪性資源(CPU、內(nèi)存) 非剝奪性資源(打印機(jī)):分配后不能強(qiáng)行收回。272、進(jìn)程推進(jìn)順序非法:合法非法28三、產(chǎn)生死鎖的必要條件:1、互斥條件:2、不剝奪條件:3、部分分配條件(請(qǐng)求和保持):4、環(huán)路條件: 防止死鎖發(fā)生,破壞四個(gè)必要條件中的一個(gè)或多個(gè)即可(主要是第3、4個(gè),第1、2條受資源特性的限制)。29四、死鎖的排除方式1、死鎖的預(yù)防2、死鎖的避免3、死鎖的檢測(cè)和恢復(fù)301、死鎖的預(yù)防——破壞四個(gè)必要條件中的一個(gè)或多個(gè)2)有序資源使用法——打破“環(huán)路條件”
內(nèi)容:把資源編號(hào)排序,要求進(jìn)程必須按編號(hào)遞增的順序申請(qǐng)資源:
m個(gè)資源,R1<R2<…<Rm,進(jìn)程P1保持了Ri,只能申請(qǐng)Rj,(j>i);
原理:總有一個(gè)進(jìn)程占據(jù)較高序號(hào)的資源,其后申請(qǐng)的資源必空閑,從而滿(mǎn)足需要一直往前推進(jìn),再釋放已用資源。
編號(hào)原則:常用資源低序號(hào),不常用資源高序號(hào);
缺點(diǎn):序號(hào)順序相對(duì)穩(wěn)定限制新設(shè)備;當(dāng)一個(gè)進(jìn)程的資源使用順序和編號(hào)順序不一致時(shí),資源閑置浪費(fèi);限制用戶(hù)的編程自由。1)預(yù)先靜態(tài)分配法——打破“部分分配條件”
內(nèi)容:進(jìn)程一次性申請(qǐng)和分配全部所需資源,未全部滿(mǎn)足則等待。
缺點(diǎn):資源嚴(yán)重浪費(fèi);進(jìn)程延遲運(yùn)行。312、死鎖的避免思路:在動(dòng)態(tài)分配資源的過(guò)程中預(yù)測(cè)出發(fā)生死鎖的可能性,加以避免。判斷此次分配是否會(huì)導(dǎo)致系統(tǒng)進(jìn)入“不安全狀態(tài)”?安全狀態(tài):系統(tǒng)至少存在一個(gè)安全序列不會(huì)發(fā)生死鎖。例:進(jìn)程需求量已分配空閑資源A1053B42C92
把空閑的3個(gè)中的2個(gè)分給B
把空閑的3個(gè)中的2個(gè)分給C安全的分配:不安全分配:32銀行家算法基本模式: 將進(jìn)程分為若干步,每一步使用的資源固定,當(dāng)進(jìn)程每一步申請(qǐng)資源時(shí),將請(qǐng)求、分配、釋放、空閑的情況結(jié)合起來(lái)計(jì)算,看是否符合分配條件。數(shù)據(jù)結(jié)構(gòu):
n個(gè)并發(fā)進(jìn)程P1…Pn共享m個(gè)資源R1…Rm: 可用資源向量Available[m]:Available[j]—資源Ri現(xiàn)有的空閑個(gè)數(shù) 最大需求矩陣Max[n*m]:Max[i,j]—進(jìn)程Pi對(duì)資源Rj的最大需要數(shù) 分配矩陣Allocation[n*m]:Allocation[i,j]—進(jìn)程Pi已獲得資源Rj的數(shù)量 需求矩陣Need[n*m]:Need[i,j]—進(jìn)程Pi還需要資源Rj的數(shù)量
Need[i,j]=Max[i,j]-Allocation[i,j]333435例:五個(gè)進(jìn)程共享三類(lèi)資源A、B、C,每類(lèi)資源數(shù)量為10、5、7。時(shí)刻T0的資源分配情況如下:MaxAllocationNeedAvaillableABCABCABCABCP0753010743332P1322200122P2902302600P3222211011P44330024311057-725 = 33236
對(duì)T0時(shí)刻進(jìn)行安全性分析后,可以找到一個(gè)安全序列{P1,P3,P4,P2,P0},則系統(tǒng)安全。T0WorkNeedAllocationWork+AllocationFinishABCABCABCABCP1332122200532trueP3532011211743trueP4743431002745trueP27456003021047trueP010477430101057true37P1發(fā)出請(qǐng)求Req(1,0,2)
<=Need(1,2,2)及Availlable(3,3,2)
為P1試探分配,修改Availlable、Allocation、Need
T1時(shí)刻進(jìn)行安全性分析,找到安全序列{P1,P3,P4,P0,P2}說(shuō)明系統(tǒng)安全,可以為P1實(shí)施分配T1WorkNeedAllocationWork+AllocationFinishABCABCABCABCP1230020302532trueP3532011211743trueP4743431002745trueP0745743010755trueP27556003021057trueT033212220038P4發(fā)出請(qǐng)求Req(3,3,0):
Req(3,3,0)<=Need(4,3,1)
Req(3,3,0)>Availlable(2,3,0),不能分配,等待。
P0發(fā)出請(qǐng)求Req(0,2,0):
Req(0,2,0)<=Need(7,4,3)
Req(0,2,0)<=Availlable(2,3,0),試探分配,修改數(shù)據(jù):AllocationNeedAvaillableABCABCABCP0030723210P1302020P2302600P3211011P4002431無(wú)法滿(mǎn)足任何進(jìn)程不能分配393、死鎖的檢測(cè)和恢復(fù)1)死鎖的檢測(cè):判斷死鎖是否發(fā)生?2)死鎖的恢復(fù): 終止各進(jìn)程,或逐個(gè)終止,直至先后釋放的資源能夠滿(mǎn)足剩余進(jìn)程的需要。403.9 線(xiàn)程一、線(xiàn)程的引入
為實(shí)現(xiàn)持續(xù)的并發(fā)執(zhí)行,引入進(jìn)程,但由于各種原因,若干進(jìn)程間會(huì)出現(xiàn)頻繁調(diào)度、切換,進(jìn)行上下文切換的開(kāi)銷(xiāo)花去不少CPU時(shí)間,降低并發(fā)的效率。
進(jìn)程的性質(zhì):
1、是系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位—PCB。
2、是程序?qū)δ硞€(gè)數(shù)據(jù)集在處理機(jī)上的執(zhí)行過(guò)程。
把兩個(gè)特點(diǎn)分開(kāi),由進(jìn)程負(fù)責(zé)資源的管理,由進(jìn)程創(chuàng)建的若干個(gè)線(xiàn)程完成運(yùn)行的特性,線(xiàn)程共享所屬進(jìn)程的資源,減少線(xiàn)程間切換的花銷(xiāo)。進(jìn)程上下文
進(jìn)程執(zhí)行活動(dòng)過(guò)程的靜態(tài)描述,是進(jìn)程執(zhí)行所依賴(lài)的環(huán)境。
當(dāng)系統(tǒng)調(diào)度新進(jìn)程占有處理機(jī)時(shí),新老進(jìn)程的上下文發(fā)生轉(zhuǎn)換。42二、線(xiàn)程的概念
進(jìn)程內(nèi)的基本調(diào)度單位; 是相對(duì)獨(dú)立的執(zhí)行單元(子任務(wù));進(jìn)程線(xiàn)程資源分配的基本單位。處理機(jī)調(diào)度的基本單位,與資源分配無(wú)關(guān),多個(gè)線(xiàn)程共享所屬進(jìn)程的資源。不同進(jìn)程有不同的虛擬地址空間,有外存掛起狀態(tài)。同一進(jìn)程內(nèi)的線(xiàn)程共享同一地址空間,無(wú)外存掛起狀態(tài)。進(jìn)程存在的標(biāo)志:進(jìn)程控制塊PCB上下文切換時(shí)間長(zhǎng)線(xiàn)程的存在標(biāo)志:線(xiàn)程控制表TCB及相關(guān)堆棧和寄存器上下文切換時(shí)間短43線(xiàn)程控制塊TCB的內(nèi)容1、線(xiàn)程的狀態(tài);2、CPU現(xiàn)場(chǎng)信息:
PC、PSW、通用寄存器、堆棧指針44三、線(xiàn)程的特點(diǎn)1、由進(jìn)程所創(chuàng)建,一個(gè)進(jìn)程至少創(chuàng)建一個(gè)線(xiàn)程,線(xiàn)程也可以創(chuàng)建線(xiàn)程;2、線(xiàn)程不擁有資源,只共享所屬進(jìn)程的資源;3、同一進(jìn)程下的線(xiàn)程運(yùn)行在相同的地址空間;4、線(xiàn)程之間需要互斥和同步機(jī)制;5、線(xiàn)程有生命期,在生命期中有狀態(tài)的變化;6、類(lèi)似程序,但一般不是完整的程序。45四、線(xiàn)程的狀態(tài)1、就緒:具備運(yùn)行條件,只等CPU;2、執(zhí)行:占有CPU運(yùn)行;3、阻塞:因?yàn)槟呈录尦鯟PU,等待;46五、線(xiàn)程的優(yōu)點(diǎn)1、創(chuàng)建和撤消線(xiàn)程、線(xiàn)程切換的開(kāi)銷(xiāo)小,提高了并發(fā)效率;一個(gè)進(jìn)程的開(kāi)銷(xiāo)大約是一個(gè)線(xiàn)程開(kāi)銷(xiāo)的30倍左右.2、線(xiàn)程共享同一地址空間的內(nèi)存和文件,減少了通信的開(kāi)銷(xiāo);3、減少用戶(hù)等待時(shí)間,提高系統(tǒng)響應(yīng)速度;4、促使用戶(hù)設(shè)計(jì)出邊界清晰、模塊獨(dú)立性好的程序。47六、線(xiàn)程的使用范圍1、多處理機(jī)系統(tǒng):
用戶(hù)程序根據(jù)功能劃分成不同線(xiàn)程,放在不同處理機(jī)上運(yùn)行。2、單處理機(jī)系統(tǒng):
1)多個(gè)用戶(hù)對(duì)文件服務(wù)器提出文件訪(fǎng)問(wèn)請(qǐng)求;
2)前臺(tái)和后臺(tái)的分工處理;
3)異步處理;
4)加快執(zhí)行速度;
5)組織復(fù)雜的工作;48七、線(xiàn)程的分類(lèi)1、用戶(hù)級(jí)線(xiàn)程:
用戶(hù)程序在用戶(hù)空間執(zhí)行線(xiàn)程庫(kù),創(chuàng)建、調(diào)度、撤消線(xiàn)程,操作系統(tǒng)內(nèi)核只管理進(jìn)程; 用戶(hù)級(jí)線(xiàn)程調(diào)度只進(jìn)行線(xiàn)程上下文切換,不涉及處理機(jī)狀態(tài),與內(nèi)核無(wú)關(guān);2、系統(tǒng)級(jí)線(xiàn)程:
操作系統(tǒng)內(nèi)核進(jìn)行管理,內(nèi)核提供系統(tǒng)調(diào)用和應(yīng)用程序接口創(chuàng)建、調(diào)度、撤消線(xiàn)程; 負(fù)責(zé)進(jìn)程和線(xiàn)程的調(diào)度;49例:Linux下的多線(xiàn)程程序example.c#include<stdio.h>#include<pthread.h>voidthread(void)
{inti;
for(i=0;i<3;i++)
printf("Thisisapthread.\n");
}intmain(void)
{pthread_tid;
inti,ret;
ret=pthread_create(&id,NULL,(void*)thread,NULL);
if(ret!=0)
{
printf("Createpthreaderror!\n");exit(1);
}
for(i=0;i<3;i++)
printf("Thisisthemainprocess.\n");
pthread_join(id,NULL);
return(0);
}50相關(guān)函數(shù)函數(shù)pthread_create用來(lái)創(chuàng)建一個(gè)線(xiàn)程:
第一個(gè)參數(shù)為指向線(xiàn)程標(biāo)識(shí)符的指針,第二個(gè)參數(shù)用來(lái)設(shè)置線(xiàn)程屬性,第三個(gè)參數(shù)是線(xiàn)程運(yùn)行函數(shù)的起始地址,最后一個(gè)參數(shù)是運(yùn)行函數(shù)的參數(shù)。 創(chuàng)建線(xiàn)程成功后,新創(chuàng)建的線(xiàn)程則運(yùn)行參數(shù)三和參數(shù)四確定的函數(shù),原來(lái)的線(xiàn)程則繼續(xù)運(yùn)行下一行代碼。函數(shù)pthread_join用來(lái)等待一個(gè)線(xiàn)程的結(jié)束:
第一個(gè)參數(shù)為被等待的線(xiàn)程標(biāo)識(shí)符,第二個(gè)參數(shù)為一個(gè)用戶(hù)定義的指針,它可以用來(lái)存儲(chǔ)被等待線(xiàn)程的返回值。 這個(gè)函數(shù)是一個(gè)線(xiàn)程阻塞的函數(shù),調(diào)用它的函數(shù)將一直等待到被等待的線(xiàn)程結(jié)束為止,當(dāng)函數(shù)返回時(shí),被等待線(xiàn)程的資源被收回。編寫(xiě)運(yùn)行Linux下的多線(xiàn)程程序,需要使用頭文
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程造價(jià)考試題庫(kù)及答案解析
- 塑料加工藝實(shí)施工程師面試問(wèn)題集
- 騰訊IT工程師面試題及解析
- 2025年人工智能客戶(hù)服務(wù)系統(tǒng)研發(fā)項(xiàng)目可行性研究報(bào)告
- 2025年農(nóng)產(chǎn)品區(qū)塊鏈追溯系統(tǒng)可行性研究報(bào)告
- 2025年自助服務(wù)技術(shù)在零售的應(yīng)用可行性研究報(bào)告
- 2025年企業(yè)ESG報(bào)告自動(dòng)生成系統(tǒng)可行性研究報(bào)告
- 2025年生態(tài)修復(fù)與環(huán)境治理項(xiàng)目可行性研究報(bào)告
- 2025年區(qū)域性物流園區(qū)建設(shè)可行性研究報(bào)告
- 2025年未來(lái)出行綜合服務(wù)平臺(tái)項(xiàng)目可行性研究報(bào)告
- 2026年關(guān)于護(hù)士長(zhǎng)工作計(jì)劃4篇
- 2025至2030全球及中國(guó)手機(jī)用鋰離子電池行業(yè)調(diào)研及市場(chǎng)前景預(yù)測(cè)評(píng)估報(bào)告
- 甘肅省定西市2023-2024學(xué)年八年級(jí)上學(xué)期數(shù)學(xué)期末考試試卷(含答案)
- 《單晶硅制備技術(shù)》課件-單晶爐水冷系統(tǒng)
- 人工氣道氣囊管理2026
- 自助機(jī)器加盟協(xié)議書(shū)
- 少年有志歌詞
- 2025年一級(jí)建造師《水利水電》真題及答案解析
- 第16課《誡子書(shū)》復(fù)習(xí)要點(diǎn)及高頻考點(diǎn)-2025-2026學(xué)年統(tǒng)編版語(yǔ)文七年級(jí)上冊(cè)
- EGFR突變肺癌的靶向治療耐藥及應(yīng)對(duì)策略
- 急診科臨床技術(shù)操作規(guī)范和臨床診療指南
評(píng)論
0/150
提交評(píng)論