實驗內容:
在兩個城市南北⽅向之間存在⼀條鐵路,多列⽕⻋可以分別從兩個城市的⻋站 排隊等待進⼊⻋道向對⽅
城市⾏駛,該鐵路在同⼀時間,只能允許在同⼀⽅向上⾏⻋,如果同時有相向的⽕⻋⾏駛將會撞⻋。請
模擬實現兩個⽅向⾏⻋,⽽不會出現撞⻋或⻓時間等待的情況。您能構造⼀個管程來解決這個問題嗎?
dp.h
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
/*訊號燈控制用的共同體*/
typedef
union semuns sem_uns;
enum state
;//火車站管程中使用的訊號量
class
sema
;//火車站管程中使用的鎖
class
lock
;//火車站管程中使用的條件變數
class
condition
;//火車站管程的定義
class
dp;
dp.cc
#include
"dp.h"
//分別是由東向西,由西向東的車輛數和單方向火車站同時最多能發的車輛數
int eastsum,westsum,d_maxcar;
sema::
sema
(int id)
sema::
~sema()
/** 訊號燈上的 down/up 操作
* semid:訊號燈陣列識別符號
* semnum:訊號燈陣列下標
* buf:操作訊號燈的結構
*/int sema::
down()
return exit_success;
}int sema::up(
)return exit_success;
}lock::
lock
(sema * s)
lock::
~lock()
//上鎖
void lock::
close_lock()
//開鎖
void lock::
open_lock()
condition::
condition
(char
*st[
],sema *sm)
void condition::
wait
(lock *lock,
int i)
}void condition::
signal
(int i)
}int dp::
get_ipc_id
(char
*proc_file,key_t key)
fgets
(line, bufsz,pf)
;while(!
feof
(pf)
)fclose
(pf)
;return-1
;}int dp::
set_sem
(key_t sem_key,
int sem_val,
int sem_***)
} sem_arg.val = sem_val;if(
semctl
(sem_id,
0,setval,sem_arg)
<0)
return sem_id;
}char
* dp::
set_shm
(key_t shm_key,
int shm_num,
int shm_***)if(
(shm_buf=
(char*)
shmat
(shm_id,0,
0))<
(char*)
0)for(i=
0; i) shm_buf[i]=0
;}if(
(shm_buf =
(char*)
shmat
(shm_id,0,
0))<
(char*)
0)return shm_buf;
}dp::dp(
int r,
int maxcur)
sema =
newsema
(sem_id)
; lock =
newlock
(sema)
;for
(int i=
0; i<=
1; i++
)*state[i]
=waitt;if(
(sem_id =
set_sem
(sem_key++
,sem_val,ipc_***)
)<0)
sema =
newsema
(sem_id)
; self[i]
=new
condition
(state,sema);}
}void dp::
start
(int i)
else
if(i==1)
//*nowcars=
*nowcars+1;
cnt[i]
=cnt[i]+1
;//模擬傳送火車的時間
sleep
(rate)
; lock-
>
open_lock()
;}//火車正常通過,離開
void dp::
quit
(int i)
elseif(
*sumeastelse
}else
}else
if(i==1)
elseif(
*sumwestelse
}else
} lock-
>
open_lock()
;}dp::~dp
()intmain
(int argc,
char
*ar**)
cout<' '
int i=
0;i<=
1;i++
)exit(0
);}}
for(
int i=
0;i<
2;i++
)return0;
}
作業系統實驗
一 實驗目的 理解vi的三種執行模式及其切方法。學會使用vi的各種操作命令進行文字檔案的編輯。用vi編寫linux下c程式,會用gcc編譯。二 實驗環境 一台裝有linux的機器 這裡預設是red hat linux 9 系統裡面有gcc編譯器。三 實驗內容 寫出主要的內容 首先用合法使用者登入系統...
作業系統實驗
分析bootloader進入保護模式的過程。在剛進入bootloader的時候,最先執行的操作分別為關閉中斷 清除eflags的df位以及將ax,ds,es,ss暫存器初始化為0 globl start start code16 cli 關中斷 cld 清除方向標誌 xorw ax,ax ax清0 ...
實驗作業系統
實驗一 linux使用環境 實驗二 linux下c程式設計環境 1 設有乙個三位數,將它的百 十 個位上的3個數,各自求立方,然後加起來,正好等於這個3位數,請在linux環境下程式設計找出所有滿足條件的數,並編譯 除錯 執行你的程式。include int main return0 實驗三 程序觀...