資源簡介
根據題目中描述的助教和學生的行為 需要兩類線程 program 和student 其中 助教的活動有編程和睡覺兩個事件 學生有等待和編程兩個事件 走廊上有三個椅子 上面坐著等待的學生 學生到后 需判斷有沒有空閑的椅子 助教決定要教學或睡覺時 也要判斷椅子上有沒有學生 所以助教和學生之間的關系表現為:
(1)助教和學生之間的同步關系:當助教睡覺時 學生進來需要喚醒助教 當有學生時 助教教其編程 沒有的時候助教睡覺
(2)助教和學生之間的互斥關系:由于每次助教只能幫一個學生 且可供等待的椅子只有3把 即助教和椅子是臨界資源 所以學生之間是互斥關系
(3)引入三個信號量和一個控制變量:
控制變量waiting用來記錄等待的學生數 初值為0;
信號量students用來表示等待的學生 初值為0;
信號量ta用來表示助教 初值為1;
信號量mutex用于互斥 初值為1;">根據題目中描述的助教和學生的行為 需要兩類線程 program 和student 其中 助教的活動有編程和睡覺兩個事件 學生有等待和編程兩個事件 走廊上有三個椅子 上面坐著等待的學生 學生到后 需判斷有沒有空閑的椅子 [更多]
代碼片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#define?n?3
sem_t?mutexstudentsta;
int?waiting=0;
int?chair[3];?
void?*?program();
void?*?student(void?*arg);
int?main(int?argcchar?*argv[])
{
?
pthread_t?student_id[10]ta_id;
int?i;
sem_init(&mutex01);
sem_init(&students00);
sem_init(&ta01);
pthread_create(&ta_idNULL(void*)programNULL);
for(i=0;i<20;i++){
sleep(2);
pthread_create(&student_id[i]NULL(void*)student(void*)(i+1));
}
for?(i=0;i<20;i++)
pthread_join(student_id[i]NULL);
pthread_join(ta_idNULL);
return?0;
}
void?*?program()
{
int?
- 上一篇:Linux下線性和DFS遍歷進程樹 內核模塊
- 下一篇:DSP算法實驗大作業
評論
共有 條評論