1。生产者消费者问题(信号量+mutex)
参考教材中的生产者消费者算法,创建5个进程,其中两个进程为生产者进程,3个进程为消费者进程。一个生产者进程试图不断地在一个缓冲中写入大写字母,另一个生产者进程试图不断地在缓冲中写入小写字母。3个消费者不断地从缓冲中读取一个字符并输出。为了使得程序的输出易于看到结果,仿照阅读材料中的实例程序,分别在生产者和消费者进程的合适的位置加入一些随机睡眠时间。
可选的实验:在上面实验的基础上实现部分消费者有选择地消费某些产品。例如一个消费者只消费小写字符,一个消费者只消费大写字母,而另一个消费者则无选择地消费任何产品。消费者要消费的产品没有时,消费者进程被阻塞。注意缓冲的管理。
2。用信号量和mutex方式实现睡觉的理发师问题
3。读者写者问题
教材和相关的阅读材料中对读者写者问题算法均有描述,但这个算法在不断地有读者流的情况下,写者会被阻塞。编写一个写者优先解决读者写者问题的程序,其中读者和写者均是多个进程,用信号量作为同步互斥机制。
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3040 2009-11-09 12:23 实验二理发师arberarberarber.vcproj
文件 1427 2009-11-09 15:57 实验二理发师arberarberarber.vcproj.77A9D0331CA8430.Administrator.user
文件 145 2009-11-09 14:36 实验二理发师arberarberDebugarber.exe.intermediate.manifest
文件 5252 2009-11-09 14:36 实验二理发师arberarberDebugBuildLog.htm
文件 2884 2009-11-09 14:36 实验二理发师arberarberDebughaircut.obj
文件 67 2009-11-09 14:36 实验二理发师arberarberDebugmt.dep
文件 109568 2009-11-09 14:36 实验二理发师arberarberDebugvc80.idb
文件 1518 2009-11-09 14:36 实验二理发师arberarberhaircut.cpp
文件 9694208 2009-11-09 15:57 实验二理发师arberarber.ncb
文件 883 2009-11-08 22:15 实验二理发师arberarber.sln
..A..H. 8192 2009-11-09 15:57 实验二理发师arberarber.suo
文件 57344 2009-11-09 14:36 实验二理发师arberdebugarber.exe
文件 69632 2009-11-08 21:46 实验二生产者消费者maindebugmain.exe
文件 10210 2009-11-08 21:46 实验二生产者消费者mainmainDebugBuildLog.htm
文件 145 2009-11-08 21:46 实验二生产者消费者mainmainDebugmain.exe.intermediate.manifest
文件 6487 2009-11-08 21:46 实验二生产者消费者mainmainDebugmain.obj
文件 67 2009-11-08 21:46 实验二生产者消费者mainmainDebugmt.dep
文件 109568 2009-11-08 21:46 实验二生产者消费者mainmainDebugvc80.idb
文件 3825 2009-11-08 21:46 实验二生产者消费者mainmainmain.cpp
文件 3035 2009-11-08 15:49 实验二生产者消费者mainmainmain.vcproj
文件 1427 2009-12-15 21:53 实验二生产者消费者mainmainmain.vcproj.77A9D0331CA8430.Administrator.user
文件 9317376 2009-12-15 21:53 实验二生产者消费者mainmain.ncb
文件 877 2009-11-08 15:47 实验二生产者消费者mainmain.sln
..A..H. 13312 2009-12-15 21:53 实验二生产者消费者mainmain.suo
文件 57344 2009-11-08 21:42 实验二生产者消费者producer-consumerdebugproducer-consumer.exe
文件 5922 2009-11-08 21:42 实验二生产者消费者producer-consumerproducer-consumerDebugBuildLog.htm
文件 67 2009-11-08 21:42 实验二生产者消费者producer-consumerproducer-consumerDebugmt.dep
文件 145 2009-11-08 21:42 实验二生产者消费者producer-consumerproducer-consumerDebugproducer-consumer.exe.intermediate.manifest
文件 2427 2009-11-08 21:42 实验二生产者消费者producer-consumerproducer-consumerDebugproducer-consumer.obj
文件 109568 2009-11-08 21:42 实验二生产者消费者producer-consumerproducer-consumerDebugvc80.idb
............此处省略81个文件信息
#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位顾客在等待
“ 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(“顾客增加
“);
int customer_wait;
customer_wait = rand()%MAX_DELAY_WAIT;
Sleep(customer_wait);
ReleaseSemaphore(customers 1 NULL);
ReleaseSemaphore(mutex 1 NULL);
}
else
{
printf(“顾客已满
“);
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 实验二理发师arberarberarber.vcproj
文件 1427 2009-11-09 15:57 实验二理发师arberarberarber.vcproj.77A9D0331CA8430.Administrator.user
文件 145 2009-11-09 14:36 实验二理发师arberarberDebugarber.exe.intermediate.manifest
文件 5252 2009-11-09 14:36 实验二理发师arberarberDebugBuildLog.htm
文件 2884 2009-11-09 14:36 实验二理发师arberarberDebughaircut.obj
文件 67 2009-11-09 14:36 实验二理发师arberarberDebugmt.dep
文件 109568 2009-11-09 14:36 实验二理发师arberarberDebugvc80.idb
文件 1518 2009-11-09 14:36 实验二理发师arberarberhaircut.cpp
文件 9694208 2009-11-09 15:57 实验二理发师arberarber.ncb
文件 883 2009-11-08 22:15 实验二理发师arberarber.sln
..A..H. 8192 2009-11-09 15:57 实验二理发师arberarber.suo
文件 57344 2009-11-09 14:36 实验二理发师arberdebugarber.exe
文件 69632 2009-11-08 21:46 实验二生产者消费者maindebugmain.exe
文件 10210 2009-11-08 21:46 实验二生产者消费者mainmainDebugBuildLog.htm
文件 145 2009-11-08 21:46 实验二生产者消费者mainmainDebugmain.exe.intermediate.manifest
文件 6487 2009-11-08 21:46 实验二生产者消费者mainmainDebugmain.obj
文件 67 2009-11-08 21:46 实验二生产者消费者mainmainDebugmt.dep
文件 109568 2009-11-08 21:46 实验二生产者消费者mainmainDebugvc80.idb
文件 3825 2009-11-08 21:46 实验二生产者消费者mainmainmain.cpp
文件 3035 2009-11-08 15:49 实验二生产者消费者mainmainmain.vcproj
文件 1427 2009-12-15 21:53 实验二生产者消费者mainmainmain.vcproj.77A9D0331CA8430.Administrator.user
文件 9317376 2009-12-15 21:53 实验二生产者消费者mainmain.ncb
文件 877 2009-11-08 15:47 实验二生产者消费者mainmain.sln
..A..H. 13312 2009-12-15 21:53 实验二生产者消费者mainmain.suo
文件 57344 2009-11-08 21:42 实验二生产者消费者producer-consumerdebugproducer-consumer.exe
文件 5922 2009-11-08 21:42 实验二生产者消费者producer-consumerproducer-consumerDebugBuildLog.htm
文件 67 2009-11-08 21:42 实验二生产者消费者producer-consumerproducer-consumerDebugmt.dep
文件 145 2009-11-08 21:42 实验二生产者消费者producer-consumerproducer-consumerDebugproducer-consumer.exe.intermediate.manifest
文件 2427 2009-11-08 21:42 实验二生产者消费者producer-consumerproducer-consumerDebugproducer-consumer.obj
文件 109568 2009-11-08 21:42 实验二生产者消费者producer-consumerproducer-consumerDebugvc80.idb
............此处省略81个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)