3 回答

TA贡献1936条经验 获得超7个赞
可能会发生错误。比如:
1.第一个读者进入后(此时count==0),p了一下rw。
2.与此同时另一个读者也进入了,而此时count 尚未更新,仍为0,因此第二个读者也认为自己是第一个进来的,也去p了rw,但是rw已经被第一个读者p过了,因此这个读者会被一直阻塞,直到最后一个读者离开,释放了rw后才能被唤醒。若有后续读者在count更新前进来,那么这些读者同样会被阻塞。
而若设置了mutex互斥信号量,第二个读者只有在count更新后才能进来,就不会发生上述错误。

TA贡献1820条经验 获得超3个赞
这是操作系统里面的读者写者问题写下伪代码:intreadcount=0;//读进程计数semaphorewriteblock=1;semaphoremutex=1;cobeginprocessreader_i(){P(mutex);readcount++;if(readcount==1)P(writeblock);//封锁写者进程V(mutex);{读资源A};P(mutex);readcount--;if(readcount==0)V(writecount);V(mutex);}processwriter(){P(writeblock);{写资源A};V(writeblock);}在Windows中,实现进程同步互斥可以使用mutex、event、semaphore等内核对象隐约记得些Win32API
- 3 回答
- 0 关注
- 178 浏览
添加回答
举报