资源简介
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个文件信息
- 上一篇:拼图的好代码
- 下一篇:pl2303驱动比较旧的版本2007
相关资源
- 编写简单的RMI程序 多线程web 服务器
- HOOK小工具(进程、窗口、全局)
- 直观端口查看器,详细显示可疑进程
- 内核驱动进程保护演示程序
- 曼彻斯特编解码_同步QuartusII工程
- HOOK 记录和模拟 Keyboard Mouse
- linux 线程池源码 c 版
- linux下用多进程同步方法解决生产者
- 多线程生产者消费者模式
- 线程同步机制-AutoResetEvent
- 用FileSystemWatcher控件实现文件同步更新
- 进程的管道通信编制一段程序,实现
- 解决WPE进不了游戏的最佳方法(闭屏
- 多线程实例:桌面智能弹球小游戏
- WPF多线程演示
- 易语言:多线程传多变量的最稳定方
- 易语言:隐藏进程
- 完美获取 CPU 的 NUMA节点数、CPU插槽个
- HP磁盘备份方案:让数据备份与业务应
- 飞康CDP让两岸数据库即时同步
- 意天Windows助手(进程强杀/进程守护
- 参数在线估算的永磁同步电机最大转
- 让程序禁止结束进程并提示拒绝访问
- 静止同步补偿器(STATCOM)综述
- 基于RBF神经网络在线辨识的永磁同步
- EMC解决方案助交行实现业务大集中同
- 中国银行集中化建设进程启示
- 基于模糊PI的低速表贴式永磁同步电机
- 文件时间戳记同步(更改)工具
- FreeFileSync 免费文件同步 v10.19 Windows版
评论
共有 条评论