有乙個盤子,可以放5個水果(蘋果or桔子)。父親每次向盤子隨機放入乙個水果(蘋果or桔子),父親放入水果的次數不少於11次。兒子只吃桔子,女兒只吃蘋果。請程式設計使用訊號量機制模擬解決此程序同步問題。列印資訊包括盤子的情況、排程的情況以及父親、兒子或者女兒執行的操作。
有題目可以得知父親是生產者,兒子與女兒是消費者,其中,父親隨機在盤子中放入蘋果和桔子,盤子滿無法放入,當女兒和兒子那水果時,需要注意的是,兩者只針對置於頂層的盤子所盛的水果是否是他們想要的,舉例來說,現在第乙個盤子裡有蘋果,第二個盤子裡有桔子,而第乙個盤子在頂層(即消費者指標指向第乙個盤子)時,兒子去拿水果,會顯示沒有桔子,儘管桔子就在第二個盤子。
1. 定義消費者/生產者結構體存放父親、女兒、兒子資訊
2. 定義盤子結構體
3. 初始化消費者、生產者
4. 將五個盤子初始化為迴圈鍊錶
5. 父親用put指標操作盤子,兒子,女兒共用take指標操作盤子
#include
#include
#include
#define plates 5
struct pcb;
struct pan;
/*初始化盤子列表*/
void paninit(struct pan * head, int num)
np->next = head->next; //構成迴圈鍊錶
}/*輸出操作*/
void output(struct pcb *p,struct pan * head)
printf("\n");
}printf("\n");
}/*父親放水果操作*/
struct pcb * putfruit(struct pan * put,struct pcb * dad)
else
else
}return put;
}/*兒子吃桔子操作*/
struct pcb * getorange(struct pan * take,struct pcb * son)
else
return take;
}/*女兒吃蘋果操作*/
if(take->frt == 1)
else
return take;
}int main();
struct pcb son = ;
struct pcb dau = ;
struct pan *head;
struct pan *put;
struct pan *take;
head = (struct pan *)malloc(sizeof(struct pan));
head->next = null;
paninit(head,5);
put = head->next; //初始化果盤操作指標
take = head->next;
printf("please input scheduling count:");
scanf("%d",&num);
srand((unsigned) time(null)); //產生種子用於隨機排程
作業系統概論 03
3 儲存管理 3.1 計算機中的儲存器 暫存器儲存器 高速緩衝區 輔助儲存器 處理器能直接訪問暫存器 主儲存器 高速緩衝區 通常的暫存器 指令暫存器 通用暫存器 控制暫存器 用來存放作業系統的程式 資料管理資訊以及作業系統與硬體的介面資訊等我稱之為系統區 除系統區外其餘的主存空間可以存放使用者的程式...
Linux作業系統作業
1,什麼是檔案系統 答 檔案系統是作業系統用於明確磁碟或分割槽上的檔案的方法和資料結構 即在磁碟上組織檔案的方法。也指用於儲存檔案的磁碟或分割槽,或檔案系統種類。因此,可以說 我有2個檔案系統 意思是他有2個分割槽,乙個存檔案,或他用 擴充套件檔案系統 意思是檔案系統的種類。第一句話是重點,檔案系統...
作業系統作業三
2 已知主存的一次訪問為 1.5us,對於 tlb 表 快表 的查詢時間可以忽略,則訪問 上述兩個邏輯位址共耗費多少時間?訪問 0ac5h 不在快表,兩次訪問記憶體 3us 訪問 1ac5h,在快表,訪問一次記憶體,1.5us 所以總共 4.5us 3.在某請求分頁管理系統中,乙個作業共5頁,作業執...