博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
操作系统课程设计:用多线程同步方法解决读者阅览问题
阅读量:6654 次
发布时间:2019-06-25

本文共 1614 字,大约阅读时间需要 5 分钟。

最近六级考完,没啥事。刚好有门操作系统课程设计,于是就打开了阔别已久的虚拟机。。。。

 

#include 
#include
#include
#include
int number=0; //馆内的人数;int buffer[5]={-1,-1,-1,-1,-1}; //-1代表空座位sem_t sem; //信号量pthread_mutex_t mutex;void *thr_fn(void * pth_id){ int chair_id, reader_id; int time; reader_id = *(int *)pth_id ; sleep(1); pthread_mutex_lock(&mutex); printf("No.%d Reader Entered!\n", reader_id); number++; printf("%d people in the reading room...\n",number); pthread_mutex_unlock(&mutex); sem_wait(&sem); for(chair_id = 0;chair_id < 5 ;chair_id++){ if(buffer[chair_id] == -1){ buffer[chair_id] = reader_id; break; } } printf("No.%d Reader sit at No.%d Seat\n",reader_id,chair_id + 1); time = rand() % 50; sleep(time + 3); printf("No.%d Reader has been finished reading, Exit!\n",reader_id ); buffer[chair_id] = -1; sem_post(&sem); pthread_mutex_lock(&mutex); number--; pthread_mutex_unlock(&mutex); pthread_exit;}int main(void){ int err,t_id,j; void *pth_id; pth_id = &t_id; pthread_t t[10]; pthread_mutex_init(&mutex,NULL); sem_init(&sem,0,5); for(t_id = 0; t_id < 10;t_id++){ err=pthread_create(&t[t_id],NULL,thr_fn,pth_id); if(err != 0) printf("ERROR! CREATE THREAD FAILED!!!\n"); else printf("No.%d THREAD READY.\n",t_id); }   for(i = 0, i<10, i++)     pthread_join(t[i],NULL);   return 0;}

 这段多线程的实现的是阅览室占座问题。打印结果时似乎有点小问题,能交差就好。。。

转载于:https://www.cnblogs.com/xupengzhuo/archive/2011/12/21/2296342.html

你可能感兴趣的文章
oracle bug? ORA-07445 ,pl/sql for in()
查看>>
Redis 客户端安装与远程连接图解
查看>>
BZOJ3328: PYXFIB(单位根反演?)
查看>>
使用EasyUI的treegrid犯的个低级错误
查看>>
jmeter 登录并发 (此文章有待修改)
查看>>
spring事务测试2,为了解决spring事务测试1
查看>>
扩展卡特兰数
查看>>
ajax对象。同步与异步及ajax发送请求
查看>>
event.stopPropagation 阻止触发父元素的绑定事件
查看>>
[开源] KJFramework.Message 智能二进制消息框架
查看>>
appcan本地数据库,uexDataBaseMgr插件
查看>>
HTML学习笔记一基本标签
查看>>
Mac、nvm、node/npm
查看>>
【转载】随机函数rand()
查看>>
二分查找 BestCoder Round #36 ($) Gunner
查看>>
PowerShell【Do While、Do Until篇】
查看>>
试验添加RAC(ORA10G)节点
查看>>
面试题编程题04-python sort和sorted用法与区别
查看>>
UWP是什么东西
查看>>
do not track
查看>>