#include <windows.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
{
//创建各互斥信号量------------------------------------------------------
HANDLE h_mutexWriterCount,h_mutexReaderCount, h_libAccess,h_writerAccess;
h_mutexWriterCount = CreateSemaphore(NULL,1,1, "mutexWriterCount");
h_mutexReaderCount = CreateSemaphore(NULL,1,1, "mutexReaderCount");
h_libAccess = CreateSemaphore(NULL,1,1, "libAccess");;
h_writerAccess = CreateSemaphore(NULL,1,1, "writerAccess");
//创建进程共享的字符lib,并初始化未'#'------------------------------------
HANDLE h_lib;
h_lib = CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,sizeof(char),"lib");
if(h_lib == NULL)
{
printf("Create shared lib failed ...!\n");
exit(1);
}
char * lib=(char*)MapViewOfFile(h_lib, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(char));
(*lib)= '#';
UnmapViewOfFile(h_lib);
//创建进程共享的整形读者计数器readerCount,并初始化未0------------------------------------
HANDLE h_readerCount;
h_readerCount = CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,sizeof(UINT),"readerCount");
if(h_readerCount== NULL)
{
printf("Create readerCount failed ...!\n");
exit(1);
}
UINT * readerCount =(UINT *)MapViewOfFile(h_readerCount, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(UINT));
(*readerCount)= 0 ;
UnmapViewOfFile(h_readerCount);
//创建进程共享的整形写者计数器readerCount,并初始化未0------------------------------------
HANDLE h_writerCount;
h_writerCount = CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,sizeof(UINT),"writerCount");
if(h_readerCount== NULL)
{
printf("Create writerCount failed ...!\n");
exit(1);
}
UINT * writerCount =(UINT *)MapViewOfFile(h_readerCount, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(UINT));
(*writerCount)= 0 ;
UnmapViewOfFile(h_writerCount);
//创建3个读者进程和2个写者进程-------------------------------------------
bool succ=false;
HANDLE h_p[5];
PROCESS_INFORMATION pi[5];
STARTUPINFO si_r1={sizeof(si_r1)};
succ=
CreateProcess("D:\\大三_上\\操作系统\\_experiment2\\_3r&w\\reader\\bin\\Debug\\reader.exe",//读者1
"1", NULL, NULL, FALSE, 0, NULL, NULL, &si_r1, &pi[0]);
if(!succ){printf("Create Process 1 failed\n"); exit(1);}
STARTUPINFO si_r2={sizeof(si_r2)};
succ=
CreateProcess("D:\\大三_上\\操作系统\\_experiment2\\_3r&w\\reader\\bin\\Debug\\reader.exe",//读者2
"2", NULL, NULL, FALSE, 0, NULL, NULL, &si_r2, &pi[1]);
if(!succ){printf("Create Process 2 failed\n"); exit(1);}
STARTUPINFO si_r3={sizeof(si_r3)};
succ=
CreateProcess("D:\\大三_上\\操作系统\\_experiment2\\_3r&w\\reader\\bin\\Debug\\reader.exe",//读者3
"3", NULL, NULL, FALSE, 0, NULL, NULL, &si_r3, &pi[2]);
if(!succ){printf("Create Process 3 failed\n"); exit(1);}
STARTUPINFO si_w1={sizeof(si_w1)};
succ=
CreateProcess("D:\\大三_上\\操作系统\\_experiment2\\_3r&w\\writer\\bin\\Debug\\writer.exe",//写者1
"1", NULL, NULL, FALSE, 0, NULL, NULL, &si_w1, &pi[3]);
if(!succ){printf("Create Process 4 failed\n"); exit(1);}
STARTUPINFO si_w2={sizeof(si_w2)};
succ=
CreateProcess("D:\\大三_上\\操作系统\\_experiment2\\_3r&w\\writer\\bin\\Debug\\writer.exe",//写者2
"2", NULL, NULL, FALSE, 0, NULL, NULL, &si_w2, &pi[4]);
if(!succ){printf("Create Process 5 failed\n"); exit(1);}
for(int i=0;i<5;i++) h_p[i]=pi[i].hProcess;
getchar();
WaitForMultipleObjects(5,h_p,TRUE,INFINITE);
//Sleep(1000000);
//CloseHandle(h_isWriter);
//CloseHandle(h_access);
// WaitForMultipleObjects(3, h_preader,TRUE, INFINITE);
// WaitForMultipleObjects(2, h_pwriter,TRUE, INFINITE);
return 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1。生产者消费者问题(信号量+mutex) 参考教材中的生产者消费者算法,创建5个进程,其中两个进程为生产者进程,3个进程为消费者进程。一个生产者进程试图不断地在一个缓冲中写入大写字母,另一个生产者进程试图不断地在缓冲中写入小写字母。3个消费者不断地从缓冲中读取一个字符并输出。为了使得程序的输出易于看到结果,仿照阅读材料中的实例程序,分别在生产者和消费者进程的合适的位置加入一些随机睡眠时间。 可选的实验:在上面实验的基础上实现部分消费者有选择地消费某些产品。例如一个消费者只消费小写字符,一个消费者只消费大写字母,而另一个消费者则无选择地消费任何产品。消费者要消费的产品没有时,消费者进程被阻塞。注意缓冲的管理。 2。用信号量和mutex方式实现睡觉的理发师问题 3。读者写者问题 教材和相关的阅读材料中对读者写者问题算法均有描述,但这个算法在不断地有读者流的情况下,写者会被阻塞。编写一个写者优先解决读者写者问题的程序,其中读者和写者均是多个进程,用信号量作为同步互斥机制。
资源推荐
资源详情
资源评论
收起资源包目录
exp2.rar (43个子文件)
_1p&c
consumer
bin
Debug
consumer.exe 718KB
consumer.cpp 2KB
obj
Debug
consumer.o 701KB
consumer.cbp 1KB
consumer.layout 246B
consumer.depend 166B
producer
bin
Debug
producer.exe 717KB
obj
Debug
producer.o 700KB
producer.cbp 1KB
producer.cpp 2KB
producer.depend 166B
producer.layout 246B
pc_problem
bin
Debug
pc_problem.exe 716KB
obj
Debug
pc_problem.o 701KB
pc_problem.depend 144B
pc_problem.cpp 2KB
pc_problem.cbp 1KB
pc_problem.layout 246B
_3r&w
reader
reader.cpp 3KB
bin
Debug
reader.exe 716KB
obj
Debug
reader.o 700KB
reader.depend 149B
reader.layout 244B
reader.cbp 1022B
r&w
r&w.cpp 4KB
r&w.depend 143B
bin
Debug
r&w.exe 717KB
obj
Debug
r&w.o 702KB
r&w.cbp 1KB
r&w.layout 243B
writer
writer.cbp 1022B
writer.depend 149B
bin
Debug
writer.exe 716KB
obj
Debug
writer.o 700KB
writer.cpp 3KB
writer.layout 243B
_2b&c
barber
bin
Debug
barber.exe 716KB
barber.cpp 2KB
obj
Debug
barber.o 700KB
barber.depend 149B
barber.layout 243B
barber.cbp 1022B
barber 0B
共 43 条
- 1
yaoyaozii
- 粉丝: 18
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页