- 16
- 0
- 约1.06万字
- 约 14页
- 2018-06-03 发布于湖北
- 举报
操作系统课程实现生产者消费者问题
《操作系统》课程设计
实现生产者消费者问题
一、课程设计的性质与任务在多进程(线程)运行环境中,进程(线程)之间并发执行,如果对进程(线程)访问临界资源(如公共变量)的操作不加限制,就会产生“与时间有关”的错误。为防止这类错误,必须用同步机构控制进程(线程)对临界资源(公共变量)的访问。本实验利用Windows系统提供的同步机制,来协调线程(Thread)间的并发执行,以加深对同步机制的理解,并学会在并发程序中引用同步机构的编程方法。 二、课程设计的内容及其要求
三、课程设计的 四、
SIGNAL原语的操作主要动作是:
sem加1;
若相加结果大于零,进程继续执行;
若相加结果小于或等于零,则从该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度。
SIGNAL原语的功能框图如图:
2、数据结构及信号量定义的说明;
创建信号量 g_hFullSemaphore = CreateSemaphore(NULL,SIZE_OF_BUFFER-1,SIZE_OF_BUFFER-1,NULL);
//四个参数分别为:表示是否允许继承、
//设置信号机的初始计数、设置信号机的
//最大计数、指定信号机对象的名称(-1是因为计数从0开始)
(3)创建缓冲区空的信号量
g_hEmptySemaphore = CreateSemaphore(NULL,0,SIZE_OF_BUFFER-1,NULL);
ReleaseSemaphore(hSemaphore, 1, NULL);
3、实验源程序关键算法;
//为每一个生产者创建生产者线程
for(int i=0;iPRODUCERS_COUNT;++i){
hThreads[i]=CreateThread(NULL,0,Producer,NULL,0,producerID[i]);
if (hThreads[i]==NULL) return -1;
}
//为每一个消费者创建消费者线程
for(int j=0;jCONSUMERS_COUNT;++j){
hThreads[PRODUCERS_COUNT+j]=CreateThread(NULL,0,Consumer,NULL,0,consumerID[j]);
if (hThreads[j]==NULL) return -1;
}
while(g_continue){
if(getchar()){ //按回车后终止程序运行
g_continue = false;
}
}
return 0;
}
//生产一个产品。简单模拟了一下,仅输出新产品的ID号
void Produce()
{
cerr -------------------------------------------------------------------\n;
cerr 生产一个产品 编号为: ++ProductID ... endl;
}
//把新生产的产品放入缓冲区
void Append()
{
cerr \n把新生产的产品放入缓冲区 ... \n;
g_buffer[in] = ProductID;
in = (in+1)%SIZE_OF_BUFFER; //把下一个生产的产品放入下一个缓冲区
//输出缓冲区当前的状态
cout \n显示缓冲区当前的状态:\n\n;
cout \n缓冲区编号产品编号\n;
for (int i=0;iSIZE_OF_BUFFER;++i){
cout 缓冲区 i : g_buffer[i];
您可能关注的文档
最近下载
- 市场部门市场营销专员工作手册(标准版).doc VIP
- 2025新课标义务教育数学(2022年版)课程标准试题库(含答案).docx VIP
- 电力工程专业设计工日定额-送电工程750kV部分.doc VIP
- 基于K-means和主成分分析的京张体育文化旅游带冰雪运动旅游市场研究.pdf VIP
- 电力工程设计收工日定额2012-3-28.doc VIP
- 人教版七年级下册英语全册教学设计(配2025年春新版教材).docx
- 电力工程专业设计工日定额-送电工程±500kV(直流)部分.doc VIP
- 2021春人教版九年级数学下册 第29章 全章教案.doc VIP
- 2025年湖北专升本武汉文理学院《动画概论》考试及答案.docx VIP
- 医院门诊服务优化与创新体系构建ppt课件.pptx
原创力文档

文档评论(0)