实验内容
1、定义一个数据缓存 buer 及用于实现同步互斥的信号量。
2、定义一个读者函数:当有写者在占用 buer 时,读者应该等待,直到写
者不再使用该 buer。 当有其他读者在占用 buer,读者可对 buer 进行
读操作。当 buer 中有数据时,则从其中读取一个数据,并显示然后退出。
当 buer 中没有数据时,应等待,直到 buer 中有数据可读。
3、定义一个写者函数当有读者在占用 buer 时,写者应该等待,直到所
有的读者都退出为止。当有其他写者占用 buer 时,该写者应该等待,直
到占用 buer 的写者退出为止。
当 buer 有空闲时,写者应该在 buer 中写入一个数据并退出。
当 buer 满时,写者应该等待,直到 buer 有空闲为止。
4、定义主函数,在其中可以任意创建读者与写者。
可根据用户输入创建读者或写者进程(线程)。
5、用户界面实验当堂所要完成事情列表:
1.调试程序使其在读者优先模式下可以运行并且能实现基本的功能得出正确的
结果:能够实现读写互斥,写写互斥,读读不互斥,一个进程结束能够唤醒等
待队列中的进程(先读者队列后写着队列)
2.根据实验要求完善功能:由用户决定写者向缓冲区中写入的内容,读者能够
读
出并显示出来;当缓冲区中没有数据时,读者要等待,直到缓冲区中有数据才
能读
3.根据“读者优先”加以改变,增加一个“写者优先”模式,并且由用户来选择
模式 if(wq.writers[i]!=0){
writer_wait=true;//
确实有写者在等待
printf("等待的写者%d 正在写请输入要写的内",wq.writers[i]);
w=0;
scanf("%s",temp);
wq.writers[i]=0;
wcount--;
break;
}
}
if(!writer_wait){//没有 xie 者等待,看是否有 du 者等待
for(inti=0;i<=m;i++){//检查写者等待队列
if(rq.readers[i]!=0){
w=0;
printf("等待的读者%d 正在读",rq.readers[i]);
for(j=0;j<300;j++){
if(temp[j]==' '){