操作系统-读者写者问题,写者优先,多个读者可以同时读书(C++实现)

最近在学习操作系统,对读者写者问题进行了实现,还存在部分问题。

    关系:读者与写者互斥、写者与写者互斥  写者优先
    临界资源:书(一本)
    分析:互斥可用互斥信号量mutex,写者优先可设置w
          写者获得写权限w,获得书后可进行对书的修改
          第一个读者需要获得书的权限,后面的读者不必,最后一个读者读完时释放书

代码:

/*
    Project: 读者写者问题
    Date:    2018/08/05
    Author:  Frank Yu
	关系:读者与写者互斥、写者与写者互斥  写者优先
	临界资源:书(一本)
	分析:互斥可用互斥信号量mutex,写者优先可设置w
	      写者获得写权限w,获得书后可进行对书的修改
		  第一个读者需要获得书的权限,后面的读者不必,最后一个读者读完时释放书
*/
#include
#include
#include
#include //多线程编程
#include
using namespace std;
//变量声明初始化**********************************************************************************
 int readercount=0;//读者数量 
 HANDLE rc_mutex;//因为读者数量而添加的互斥信号量
 HANDLE w;//实现写者优先
 HANDLE book;//互斥访问书籍
 //进程管理-读者线程
unsigned __stdcall threadReader(void *)
{
    for(int i = 0; ; i++){
		WaitForSingleObject(w, INFINITE);//判断写者是否再写
		WaitForSingleObject(rc_mutex, INFINITE);//对readercount互斥访问
		if(readercount==0)WaitForSingleObject(book, INFINITE);//第一位读者申请书
		readercount++;
		Sleep(100);
		ReleaseSemaphore(rc_mutex, 1, NULL);//释放互斥信号量rc_mutex
		ReleaseSemaphore(w, 1, NULL);//释放写者优先信号量
		cout<

 

结果截图:

操作系统-读者写者问题,写者优先,多个读者可以同时读书(C++实现)_第1张图片 读者写者

从结果可以看出,一直是只能一个读者读书,看代码并不能看出什么问题,请大神指教。。。

实现的写者优先是相对的,写者会在w的阻塞队列中等待,当读者(包括w的阻塞队列中写者前的读者)读完后,才可写。

有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。

你可能感兴趣的:(多线程,操作系统)