写者优先算法

swnuwangyun 2002-12-07 12:14:03
麻烦大家帮我看一下下面地写者优先算法,测试时大部分情况下能构得到正确地结果,但是偶尔会出错,并且出错地概率不是很大,但是肯定有问题,不知道问题处在何处,问老师老师也说不清

HANDLE hDataMutex
HANDLE hOpMutex
HANDLE hCMutex
int counter=0

void read()
{
p(hOpMutex)
//read the data
v(hOpMutex)
}
void write()
{
p(hCMutex);
if(counter==0)
p(hOpMutex);
counter++;
v(hCMutex);

p(hDataMutex);
//write the data
v(hDataMutex);

p(hCMutex);
counter--;
if(counter==0)
v(hOpMutex);
v(hCMutex);
}
...全文
286 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaoyifei1 2002-12-15
  • 打赏
  • 举报
回复
读者没有set counter,能对马?可能是抢占式的吧,在考虑一下巴。
应该有读者队列,写者队列。
libi 2002-12-15
  • 打赏
  • 举报
回复
能说说你怎么测试的吗?
swnuwangyun 2002-12-15
  • 打赏
  • 举报
回复
为什么,根据我的意思,只要有一个读者在读就不可能有写者在写,因此读者可以同时读,但在最后一个读者读完之前,没有一个写者能后获得临界区。

在实际测试中,我按照你所说的让各个读者也互斥,结果没有发生错误,并且模拟结果似乎也是正确的,写者的优先级比较高,但是我不明白为什么回这样。按照我理论上的分析,如果我的算法是错误的,那大部分情况下的正确测试结果该如何解释?如果我的算法是正确的,那小概率的错误测试结果又该如何解释?
fosil 2002-12-15
  • 打赏
  • 举报
回复
To swnuwangyun:
你这个算法有一个问题:读者之间也是互斥的,不能同时读。
zhdleo 2002-12-09
  • 打赏
  • 举报
回复
看不到下面的代码?
libi 2002-12-09
  • 打赏
  • 举报
回复
我也没看出错误,不知道你是怎么测试的。
write()在第三行才开始“封锁”读者,也就是说在此之前读者可以进入。如果你的测试在第一行处就认为写者已经进入,那么会把这种情况归于错误了。

65,202

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧