gpt4 book ai didi

c - Reader - Writer 互斥体

转载 作者:太空宇宙 更新时间:2023-11-04 01:42:51 25 4
gpt4 key购买 nike

这是只读一致性的读写器问题。这是算法:

void reader() {
while (1) {
P(mutex);
rc++;
if (rc == 1) P(db); /* <---- A */
V(mutex); /* <---- B */
read_data_base();
P(mutex);
rc--;
V(mutex);
if (rc == 0) V(db);
}
}

void writer() {
while (1) {
P(db);
write_data_base();
V(db);
}
}

这是我的问题:1.阅读器代码中A行的用途是什么?2. 如果我们删除该行代码是否仍能正常工作?

最佳答案

  • A 行的目的是检查当前读取器是否是写入后的第一个读取器(或总体上的第一个读取器)。如果是这种情况,那么他必须获得数据库互斥量(db),这样就没有写入者可以写入数据库,而至少有一个读取者正在读取它。

    最后一位读者对应的行是:

    if (rc == 0) V(db);

    这一行的目的,是检查当前的读者是否是最后一个读者,以便作者可以进入下一个(如果没有另一个读者在作者之前进入)。

  • 根据上面的描述,如果您删除 A 行,您的代码将无法正常工作。

注意:正如下面 Vlad 的回答(及其评论中的讨论)所示,V(mutex) 应该在 if (rc == 0) V(db).

关于c - Reader - Writer 互斥体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2307553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com