操作系统编程问题求解:进程同步

来源:百度知道 编辑:UC知道 时间:2024/07/04 07:34:32
要求
在Windows环境下,创建一个包含n 个线程的控制台进程。用这n 个线程来表示n 个读者或写者。每个线程按相应测试数据文件的要求,进行读写操作。请用信号量机制实现读者-写者问题(读者优先)。
读者-写者问题的读写操作限制:
1)写-写互斥;
2)读-写互斥;
3)读-读允许;
读者优先的附加限制:如果一个读者申请进行读操作时已有另一读者正在进行读操作,则该读者可直接开始读操作。
运行结果显示要求:要求在每个线程创建、发出读写操作申请、开始读写操作和结束读写操作时分别显示一行提示信息,以确信所有处理都遵守相应的读写操作限制。
测试数据文件格式
测试数据文件包括n行测试数据,分别描述创建的n个线程是读者还是写者,以及读写操作的开始时间和持续时间。每行测试数据包括四个字段,各字段间用空格分隔。
字段1:一个正整数,表示线程序号;
字段2:表示相应线程角色,R表示读者,W表示写者;
字段3:一个正数,表示读写操作的开始时刻。线程创建后,延时相应时间(单位为秒)后发出对共享资源的读写申请;
字段4:一个正数,表示读写操作的持续时间。当线程读写申请成功后,开始对共享资源的读写操作,该操作持续相应时间后结束,并释放共享资源。
下面是一个测试数据文件的例子:(实际试验中,可自定义行数及每行的取值)
1 R 3 5
2 W 4 5
3 R 5 2
4 R 6 5
5 W 5 3

谢谢解答的朋友了

windows下用信号量实现主要用这个函数
HANDLE CreateSemaphore(
LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
LONG lInitialCount,
LONG lMaximumCount,
LPCTSTR lpName
);

用纯API方式创建线程用这个函数
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId
);

读者-写者问题是OS经典算法问题, 可参见任何一本操作系统原理书
我推荐的是WILLIAM STALLINGS的《操作系统:精髓与设计原理》
还有Tanenbaum的《现代操作系统(第2版》给出的算法也很不错

貌似是很老的题目了……只能作为锻炼编程思维的题目。所以如果直接看答案的话就不能得到相应的效果了。建议看看《操作系统原理》一书中讲进程互斥的一章,对你的思维会有帮助。

有趣的问题,先收藏着,有做做看

下面是别人写的答案

。。。。没有现成的。抱歉。在单位写了一天,不想再看到这些了。抱歉。

先收藏一下,有时间做做看

操作系统树上有