资源简介

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个文件信息

评论

共有 条评论