资源简介
1。生产者消费者问题(信号量+mutex)
参考教材中的生产者消费者算法,创建5个进程,其中两个进程为生产者进程,3个进程为消费者进程。一个生产者进程试图不断地在一个缓冲中写入大写字母,另一个生产者进程试图不断地在缓冲中写入小写字母。3个消费者不断地从缓冲中读取一个字符并输出。为了使得程序的输出易于看到结果,仿照阅读材料中的实例程序,分别在生产者和消费者进程的合适的位置加入一些随机睡眠时间。
可选的实验:在上面实验的基础上实现部分消费者有选择地消费某些产品。例如一个消费者只消费小写字符,一个消费者只消费大写字母,而另一个消费者则无选择地消费任何产品。消费者要消费的产品没有时,消费者进程被阻塞。注意缓冲的管理。
2。用信号量和mutex方式实现睡觉的理发师问题
3。读者写者问题
教材和相关的阅读材料中对读者写者问题算法均有描述,但这个算法在不断地有读者流的情况下,写者会被阻塞。编写一个写者优先解决读者写者问题的程序,其中读者和写者均是多个进程,用信号量作为同步互斥机制。
代码片段和文件信息
#include “stdio.h“
#include “windows.h“
#define CHAIRS 5
#define MAX_DELAY_BARBER 100
#define MAX_DELAY_HAIRCUT 100
#define MAX_DELAY_WAIT 400
HANDLE customers barbers mutex h_barber h_haircut;
int waiting = 0;
DWORD WINAPI barber(PVOID pvParam)
{
while (1)
{
WaitForSingleobject(customers INFINITE);
WaitForSingleobject(mutex INFINITE);
waiting--;
ReleaseSemaphore(barbers 1 NULL);
ReleaseSemaphore(mutex 1 NULL);
printf(“理发师在帮顾客理发,还有%d位顾客在等待\n“ waiting);
int time_haircut;
time_haircut = rand()%MAX_DELAY_HAIRCUT;
Sleep(time_haircut);
}
return 0;
}
DWORD WINAPI haircut(PVOID pvParam)
{
while (1)
{
WaitForSingleobject(mutex INFINITE);
if (waiting < CHAIRS)
{
waiting++;
printf(“顾客增加\n“);
int customer_wait;
customer_wait = rand()%MAX_DELAY_WAIT;
Sleep(customer_wait);
ReleaseSemaphore(customers 1 NULL);
ReleaseSemaphore(mutex 1 NULL);
}
else
{
printf(“顾客已满\n“);
ReleaseSemaphore(mutex 1 NULL);
}
}
return 0;
}
int main(int argc char* argv[])
{
customers = CreateSemaphore(NULL 0 5 NULL);
barbers = CreateSemaphore(NULL 0 1 NULL);
mutex = CreateSemaphore(NULL 1 1 NULL);
h_barber = CreateThread(NULL 0 barber NULL 0 NULL);
h_haircut = CreateThread(NULL 0 haircut NULL 0 NULL);
WaitForSingleobject(h_barber INFINITE);
WaitForSingleobject(h_haircut INFINITE);
return 0;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3040 2009-11-09 12:23 实验二\理发师\barber\barber\barber.vcproj
文件 1427 2009-11-09 15:57 实验二\理发师\barber\barber\barber.vcproj.77A9D0331CA8430.Administrator.user
文件 145 2009-11-09 14:36 实验二\理发师\barber\barber\Debug\barber.exe.intermediate.manifest
文件 5252 2009-11-09 14:36 实验二\理发师\barber\barber\Debug\BuildLog.htm
文件 2884 2009-11-09 14:36 实验二\理发师\barber\barber\Debug\haircut.obj
文件 67 2009-11-09 14:36 实验二\理发师\barber\barber\Debug\mt.dep
文件 109568 2009-11-09 14:36 实验二\理发师\barber\barber\Debug\vc80.idb
文件 1518 2009-11-09 14:36 实验二\理发师\barber\barber\haircut.cpp
文件 9694208 2009-11-09 15:57 实验二\理发师\barber\barber.ncb
文件 883 2009-11-08 22:15 实验二\理发师\barber\barber.sln
..A..H. 8192 2009-11-09 15:57 实验二\理发师\barber\barber.suo
文件 57344 2009-11-09 14:36 实验二\理发师\barber\debug\barber.exe
文件 69632 2009-11-08 21:46 实验二\生产者消费者\main\debug\main.exe
文件 10210 2009-11-08 21:46 实验二\生产者消费者\main\main\Debug\BuildLog.htm
文件 145 2009-11-08 21:46 实验二\生产者消费者\main\main\Debug\main.exe.intermediate.manifest
文件 6487 2009-11-08 21:46 实验二\生产者消费者\main\main\Debug\main.obj
文件 67 2009-11-08 21:46 实验二\生产者消费者\main\main\Debug\mt.dep
文件 109568 2009-11-08 21:46 实验二\生产者消费者\main\main\Debug\vc80.idb
文件 3825 2009-11-08 21:46 实验二\生产者消费者\main\main\main.cpp
文件 3035 2009-11-08 15:49 实验二\生产者消费者\main\main\main.vcproj
文件 1427 2009-12-15 21:53 实验二\生产者消费者\main\main\main.vcproj.77A9D0331CA8430.Administrator.user
文件 9317376 2009-12-15 21:53 实验二\生产者消费者\main\main.ncb
文件 877 2009-11-08 15:47 实验二\生产者消费者\main\main.sln
..A..H. 13312 2009-12-15 21:53 实验二\生产者消费者\main\main.suo
文件 57344 2009-11-08 21:42 实验二\生产者消费者\producer-consumer\debug\producer-consumer.exe
文件 5922 2009-11-08 21:42 实验二\生产者消费者\producer-consumer\producer-consumer\Debug\BuildLog.htm
文件 67 2009-11-08 21:42 实验二\生产者消费者\producer-consumer\producer-consumer\Debug\mt.dep
文件 145 2009-11-08 21:42 实验二\生产者消费者\producer-consumer\producer-consumer\Debug\producer-consumer.exe.intermediate.manifest
文件 2427 2009-11-08 21:42 实验二\生产者消费者\producer-consumer\producer-consumer\Debug\producer-consumer.obj
文件 109568 2009-11-08 21:42 实验二\生产者消费者\producer-consumer\producer-consumer\Debug\vc80.idb
............此处省略81个文件信息
- 上一篇:gisoffice软件
- 下一篇:Kerberos v5 源代码
相关资源
- labview实验例程(STM32 USB)
- Mathematica与数值分析实验(王同科张东
- 单片机实验含有+电子琴演奏实+直流电
- 山东大学图形学实验二多边形的世界
- hit-oslab-linux0.11
- 获取指定进程的内存和cpu使用率
- 深入解析windows操作系统 第四版 潘爱
- 实验报告2连续时间信号的频域分析
- 数字高程模型教程第二版汤国安等随
- trampoline2 法国的通过OSEK认证的汽车操
- 最小最干净的WinPE
- 操作系统学习指导与习题解析
- 嵌入式LINUX程序设计设计案例与实验教
- 嵌入式实时操作系统μCOS-Ⅱ经典——
- 《操作系统原理》陈向群_北京大学
- STM32不完全手册库函数版本
- 神码实验手册
- ORANGE’S:一个操作系统的实现高清晰
- 现代操作系统
- 操作系统教程第四版孙钟秀.zip
- ccnp资料全部是PPT
- DE0 Altera Cyclone III FPGA 实验板
- ORANGE’S:一个操作系统的实现高清晰
- 固高控制卡XY运动控制平台实验软件源
- 进程保护四个
- 生物实验设计与数据分析中文版
- 从实践中学嵌入式Linux操作系统
- ucore的实验答案
- coursera北京大学操作系统课件
- zw_Linux内核设计的艺术:图解Linux操作
评论
共有 条评论