• 大小: 1KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-05-27
  • 语言: 其他
  • 标签: Linux  多线程  

资源简介

根据题目中描述的助教和学生的行为 需要两类线程 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 

评论

共有 条评论