资源简介
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
相关资源
- 基于位置控制、速度控制、位移控制
- 重大软院操作系统实验二:线程调度
- 网络抓包工具,可指定进程抓包
- Pker多线程后台极速扫描工具2.01修正版
- 后台进程查看
- Linux编程手册-多线程-详细资料.rar
- QT多线程实现图片以缩略图形式显示图
- Delphi无法运行提示EditorLineEnds.ttr另一
- UWB TDOA无线同步官方实现笔记-中文版
- 操作系统实验 7种进程调度算法的实现
- 龙腾单IP单进程(驱动板)v1.2(解压
- GIT代码同步可视化界面工具
- 比较好用的进程守护程序
- linux内核分析实验 模拟宾馆房间预订
- CPU Cache and Memory Ordering
- 多线程ftp客户端可以实现多站点和上
- qt5音乐播放器,实现歌词同步,本地
- 线程池实现蚁群算法的简单并行
- STM32F103双ADC模式同步采集两通道电压
- 操作系统进程调度算法实验报告
- 进程同步实验——生产者与消费者问
- 文件夹同步工具
- 武汉理工大学 面向对象与多线程综合
- 多线程网络文件传输的设计与实现
- UWB_TDOA.rar
- PMSM永磁同步电机匝间短路故障的研究
- 现代电机控制技术
- windows 进程守护软件
- 永磁同步电机id=0控制,STM32F4程序
- 基于Qt实现的多线程客户端与服务器
评论
共有 条评论