操作系统实验二:进程、线程之间的同步


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位顾客在等待
“ 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个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)