資源描述:
《進程之間的互斥和同步》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在行業(yè)資料-天天文庫。
1、西安電子科技大學《操作系統(tǒng)原理》實驗報告西安電子科技大學計算機學院實驗報告題目:進程的同步與互斥專業(yè):計算機科學與技術(shù)姓名:班級:學號:時間:2014年5月18日西安電子科技大學《操作系統(tǒng)原理》實驗報告實驗內(nèi)容補充說明無一、進程互斥1.實驗內(nèi)容設計實驗實現(xiàn)線程之間的同步和互斥。實驗一:售票程序模擬:給定初始票量,利用大量的線程模擬售票過程,每次售票完成后顯示剩余的票量。2.理論闡述在系統(tǒng)中有一些需要相互合作,協(xié)同工作的的進程,它們之間的相互之間的聯(lián)系稱為進程之間的同步,另外的一中情況是進程因為爭用臨界資源而互斥,叫做進程之間的互斥,同樣的道理也使用與多個線程之間。3.實現(xiàn)方法(
2、不加互斥機制)對于實驗一,要實現(xiàn)兩個線程之間的互斥,需要設計一個公用的信號量S,以及設定起始的票數(shù)作為全局變量,設定線程的個數(shù)并且用threadID來加以創(chuàng)建,分別實現(xiàn)各個線程的函數(shù)。4.結(jié)果及分析如圖所示實驗結(jié)果,實驗一中因為只定義了一個公用的信號量S1,所以每次只可以有一個線程運行,也就是說每次操作只可以賣出一張票,即線程之間是互斥的。5.解決方案#include#includeusingnamespacestd;西安電子科技大學《操作系統(tǒng)原理》實驗報告HANDLEs1;intsum;inti=1;DWORDthreadID[2];
3、//創(chuàng)建線程voidprocess1(){while(sum){if(WaitForSingleObject(s1,INFINITE)==WAIT_OBJECT_0)//P(s1){sum=sum-1;cout<<"num"<
4、while(sum){if(WaitForSingleObject(s1,INFINITE)==WAIT_OBJECT_0)//P(s1){sum=sum-1;cout<<"num"<
5、];//定義兩線程句柄s1=CreateSemaphore(NULL,1,1,NULL);//定義信號量S1intsum=100;while(sum){thread[0]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(process1),NULL,0,&threadID[0]);thread[1]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(process2),NULL,0,&threadID[1]);}return0;}西安電子科技大學《操作系統(tǒng)原理》實驗報告二、進程同步1.實驗內(nèi)容實驗
6、二:實現(xiàn)司機售票員同步程序:司機任務,開車,售票員任務:開門,售票。車運行是不可以開門,門開著,車不可以運行.......2.理論闡述在系統(tǒng)中有一些需要相互合作,協(xié)同工作的的進程,它們之間的相互之間的聯(lián)系稱為進程之間的同步,另外的一中情況是進程因為爭用臨界資源而互斥,叫做進程之間的互斥,同樣的道理也使用與多個線程之間。3.詳細實現(xiàn)對于實驗二,實現(xiàn)兩個進程之間的同步,設定兩個私有信號量S1,S2分別表示司機和售票員,在司機的子函數(shù)中編寫P(S1)和V(S2)操作,在售票員的子函數(shù)中實現(xiàn)P(S2)和V(S1)操作。4.實驗結(jié)果實驗二中定義了兩個私有的信號量S1,S2,PV操作使得司
7、機和售票員的線程之間是同步的關系,從而實現(xiàn)了線程之間的互斥。5.解決方案#include#includeusingnamespacestd;西安電子科技大學《操作系統(tǒng)原理》實驗報告#defineN1HANDLEs1;HANDLEs2;voiddriver(){while(1){if(WaitForSingleObject(s1,INFINITE)==WAIT_OBJECT_0)//P(s1){cout<<"司機正在開車";Sleep(5000