资源简介

1。生产者消费者问题(信号量+mutex) 参考教材中的生产者消费者算法,创建5个进程,其中两个进程为生产者进程,3个进程为消费者进程。一个生产者进程试图不断地在一个缓冲中写入大写字母,另一个生产者进程试图不断地在缓冲中写入小写字母。3个消费者不断地从缓冲中读取一个字符并输出。为了使得程序的输出易于看到结果,仿照阅读材料中的实例程序,分别在生产者和消费者进程的合适的位置加入一些随机睡眠时间。 可选的实验:在上面实验的基础上实现部分消费者有选择地消费某些产品。例如一个消费者只消费小写字符,一个消费者只消费大写字母,而另一个消费者则无选择地消费任何产品。消费者要消费的产品没有时,消费者进程被阻塞。注意缓冲的管理。 2。用信号量和mutex方式实现睡觉的理发师问题 3。读者写者问题 教材和相关的阅读材料中对读者写者问题算法均有描述,但这个算法在不断地有读者流的情况下,写者会被阻塞。编写一个写者优先解决读者写者问题的程序,其中读者和写者均是多个进程,用信号量作为同步互斥机制。

资源截图

代码片段和文件信息

#include
#include
#include
#include
#define nSize 5

int main(int argcchar * argv[])
{
//printf(“%s\n“argv[1]);
int id;
if(strcmp(argv[1]“0“)==0)
id=0;
else if(strcmp(argv[1]“1“)==0) id=1;
else id=2;

printf(“Consumer %d is working...\n“id);
//Sleep(rand()%100);

HANDLE hofempty=OpenSemaphore(SEMAPHORE_ALL_ACCESSTRUE“empty“);

if(hofempty == false )
{
printf(“Consumer %d open empty failed...\n“id);
exit(1);
}
HANDLE hoffull=OpenSemaphore(SEMAPHORE_ALL_ACCESSTRUE“full“);
if(hoffull == false )
{
printf(“Consumer %d open full failed...\n“id);
exit(1);
}
HANDLE hofmutex=OpenMutex(MUTEX_ALL_ACCESSTRUE“mutex“);
if(hofmutex == false )
{
printf(“Consumer %d open mutex failed...\n“id);
exit(1);
}
while(1)
{
HANDLE hbuffer=OpenFileMapping(FILE_MAP_ALL_ACCESS FALSE“Buffer“);
if(hbuffer == NULL )
{
printf(“Consumer %d Open Buffer failed...\n“id);
}
char* buffer=(char *)MapViewOfFile(hbufferFILE_MAP_ALL_ACCESS00nSize*sizeof(char));

HANDLE hiter = OpenFileMapping(FILE_MAP_ALL_ACCESS FALSE“Iter“);
if(hiter == NULL )
{
printf(“Consumer %d Open Iter failed...\n“id);
}
UINT * iter=(UINT *)MapViewOfFile(hiterFILE_MAP_ALL_ACCESS00sizeof(UINT));

printf(“Consumer %d is applying for a char...\n“id);
WaitForSingleobject(hoffullINFINITE);
Sleep(rand()%2000);

printf(“Consumer %d is trying to enter buffer\n“id);
WaitForSingleobject(hofmutexINFINITE);
Sleep(rand()%2000);

printf(“Consumer %d has entered the buffer and is working...\n“id);
printf(“Consumer %d has got a char        ......    ] %c [%d \n“idbuffer[*iter]*iter);
*iter -=1;

Sleep(rand()%2000);

UnmapViewOfFile(hiter);
UnmapViewOfFile(hbuffer);

printf(“Consumer %d is leaving the Buffer...\n“id);

ReleaseSemaphore(hofempty1NULL);
ReleaseMutex(hofmutex);

}

return 0;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     735580  2009-11-07 20:31  _1p&c\consumer\bin\Debug\consumer.exe

     目录          0  2009-11-07 20:31  _1p&c\consumer\bin\Debug

     目录          0  2009-11-05 11:18  _1p&c\consumer\bin

     文件       1030  2009-11-05 12:47  _1p&c\consumer\consumer.cbp

     文件       1986  2009-11-07 18:58  _1p&c\consumer\consumer.cpp

     文件        166  2009-11-09 00:48  _1p&c\consumer\consumer.depend

     文件        246  2009-11-09 01:12  _1p&c\consumer\consumer.layout

     文件     718172  2009-11-07 20:31  _1p&c\consumer\obj\Debug\consumer.o

     目录          0  2009-11-07 20:31  _1p&c\consumer\obj\Debug

     目录          0  2009-11-05 11:18  _1p&c\consumer\obj

     目录          0  2009-11-09 01:12  _1p&c\consumer

     文件     733577  2009-11-09 00:48  _1p&c\pc_problem\bin\Debug\pc_problem.exe

     目录          0  2009-11-09 00:48  _1p&c\pc_problem\bin\Debug

     目录          0  2009-11-05 00:58  _1p&c\pc_problem\bin

     文件     717528  2009-11-09 00:48  _1p&c\pc_problem\obj\Debug\pc_problem.o

     目录          0  2009-11-09 00:48  _1p&c\pc_problem\obj\Debug

     目录          0  2009-11-04 21:33  _1p&c\pc_problem\obj

     文件       1038  2009-11-05 01:09  _1p&c\pc_problem\pc_problem.cbp

     文件       2464  2009-11-05 15:56  _1p&c\pc_problem\pc_problem.cpp

     文件        144  2009-11-05 15:58  _1p&c\pc_problem\pc_problem.depend

     文件        246  2009-11-09 01:12  _1p&c\pc_problem\pc_problem.layout

     目录          0  2009-11-09 01:12  _1p&c\pc_problem

     文件     734044  2009-11-05 15:52  _1p&c\producer\bin\Debug\producer.exe

     目录          0  2009-11-05 15:52  _1p&c\producer\bin\Debug

     目录          0  2009-11-04 20:03  _1p&c\producer\bin

     文件     717102  2009-11-05 15:52  _1p&c\producer\obj\Debug\producer.o

     目录          0  2009-11-05 15:52  _1p&c\producer\obj\Debug

     目录          0  2009-11-04 20:03  _1p&c\producer\obj

     文件       1030  2009-11-05 01:09  _1p&c\producer\producer.cbp

     文件       2097  2009-11-05 15:52  _1p&c\producer\producer.cpp

............此处省略54个文件信息

评论

共有 条评论