优先读者的读者/写者问题的算法设计

来源:互联网 发布:三角形测试用例java 编辑:程序博客网 时间:2024/04/30 22:48

首先该问题必须满足下列四个要求:

读者可以共享

写者互斥

除非有一个写者在访问共享数据集,其他情况下,读者不等待

写者执行写操作前,应该让所有读者和写者退出


对于写者来说,只要设置一个写者与写者之间、读者与写者之间共享的一个信号量w即可,w=1;对于读者,需要特殊处理,要求对读者进行计数,因为,读者对文件是共享的,对于第一个读者,需要对数据集“加锁”,防止写者对数据集进行访问,而其他读者可以直接进入访问数据集;对于最后一个读者,需要“解锁”,以便让写者或后面的读者能够访问数据集。读者计数ReadCnt,与之互斥的信号量mutex,初值为0。

程序如下:

typedef int SemaphoreSemaphore mutex = 1, w = 1;int ReadCnt = 0;//下面读者与写者进程并发执行process Reader(void){    while(1)    {        P(mutex);        ReadCnt++;        if(1 == ReadCnt)        P(w);        V(mutex);        /*对数据集进行读操作*/        P(mutex);        ReadCnt--;        if(0 == ReadCnt)            V(w);        V(mutex);    }}process Writer(void){    while(1)    {        P(w);        /*对数据集进行写操作*/        V(w);    }}

0 0
原创粉丝点击