實驗三-進程同步_第1頁
實驗三-進程同步_第2頁
實驗三-進程同步_第3頁
實驗三-進程同步_第4頁
實驗三-進程同步_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

200X級XXXX專業(yè)集美大學誠毅學院2011~2012學年第一學期200X級XXXX專業(yè)集美大學誠毅學院2011~2012學年第一學期集美大學誠毅學院信息工程系實驗報告課程名稱計算機操作系統(tǒng)序號名稱實驗三進程同步姓名孫幸杰學號2011957032專業(yè)計算1191日期13.11.22成績教師洪聯(lián)系評語:

1.實驗目的:掌握用Linux信號燈集機制實現(xiàn)兩個進程間的同步問題2.實驗環(huán)境Win7系統(tǒng)虛擬機下運行的Linux系統(tǒng)。3.實驗內(nèi)容司機與售票員問題是兩個進程的同步問題,司機要啟動汽車前,要檢查售票員車門是否已經(jīng)關(guān)好;售票員要打開車門之前要等司機把車停穩(wěn).要求:需要的信號燈:SystemV信號燈實現(xiàn)用于控制司機是否可以啟動車輛的的信號燈S1=0用于控制售票員是否可以開門的信號燈S2=04.實驗程序(有詳細注釋)//---------------------------------------------------//這是一個公共汽車的駕駛員與售票員之間的同步問題//一個進程模擬駕駛員,一個進程模擬售票員;//駕駛員的動作:啟動車輛--駕駛車輛--到站停車//售票員的動作:關(guān)門--售票--開門;//售票員把車門關(guān)好后,駕駛員才能啟動汽車;//當駕駛員在一個站把車子停穩(wěn)后,售票員方能打開車門;////本程序采用SystemV的信號燈集實現(xiàn)兩者的同步//2010.10.8//-----------------------------------------------------#include<sys/types.h>#include<sys/ipc.h>#include<sys/sem.h>#include<stdio.h>#include<time.h>#include<stdlib.h>unionsemun{intval;//僅用于SETVAL命令structsemid_ds*buf;//用于IPC_SET等命令ushort*array;//用于SETALL等命令};//用于信號燈初始化//semid--信號燈的ID//val--欲設(shè)置的信號燈初值//sn--信號燈集的分量voidseminit(intsemid,intval,intsn){unionsemunarg;arg.val=val;semctl(semid,sn,SETVAL,arg);};//實現(xiàn)信號燈的P操作//semid--信號燈的ID//sn--信號燈集的分量voidsemdown(intsemid,intsn){/*definePoperating*/structsembufop;op.sem_num=sn;op.sem_op=-1;//P操作為-1op.sem_flg=0;semop(semid,&op,1);}//實現(xiàn)信號燈的V操作//semid--信號燈的ID//sn--信號燈集的分量voidsemup(intsemid,intsn){/*defineVoperating*/structsembufop;op.sem_num=sn;op.sem_op=1;//V操作為1op.sem_flg=0;semop(semid,&op,1);}main(){inti,j;key_tsemkey;char*pathname="./driver.c";intsemid;intrrand;srand((int)time(0));//用于產(chǎn)生隨機延時semkey=ftok(pathname,45);if(semkey==-1){printf("Error:createakeyerror!\n");exit(-1);}semid=semget(semkey,2,IPC_CREAT|0666);if(semid==-1){printf("Error:createsemaphoreerror!\n");exit(-1);}seminit(semid,0,0);//對信號燈集的0號分量進行初始化seminit(semid,0,1);//對信號燈集的1號分量進行初始化if(fork()==0)//Createaprocess{//子進程作為駕駛員進程for(i=1;i<10;i++){semdown(semid,0);//等待售票員關(guān)門printf("Driver(pid:%d):Startthebus.\n",getpid());printf("Driver(pid:%d):Traveling....\n",getpid());rrand=1+(int)(6.0*rand()/(RAND_MAX+1.0));//產(chǎn)生一個(1-6)的隨機數(shù)表示車輛的行駛時間sleep(rrand);printf("Driver(pid:%d):Arriveatastation.stop!\n",getpid());semup(semid,1);//喚醒售票員}}else{//父進程作為售票員進程for(j=1;j<10;j++){printf("Conductor(pid:%d):Closealldoors.\n",getpid());semup(semid,0);//喚醒司機printf("Conductor(pid:%d):Ticketing...\n",getpid());semdown(semid,1);//等待汽車到站printf

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論