gpt4 book ai didi

concurrency - 读者-作者同步问题

转载 作者:行者123 更新时间:2023-12-04 03:17:26 25 4
gpt4 key购买 nike

我无法理解为什么第一个读者-作者问题会导致写进程饿死,即:代码如何为读者进程提供优先级?当其中一个读取进程执行 signal(wrt) 时,写入进程是否应该无法获得锁定?是信号量列表的结构(正如我所看到的那样,作者将如何被后进先出列表中源源不断的读者进程饿死)以优先考虑读者进程的方式,还是我误解了这里的一些基本知识?

semaphore wrt=1,mutex=1;
readcount=0;
writer()
{
wait(wrt);
//writing is done
signal(wrt);
}

reader()
{
wait(mutex);
readcount++;
if(readcount==1)
wait(wrt);
signal(mutex);
///Do the Reading
///(Critical Section Area)
wait(mutex);
readcount--;
if(readcount==0)
signal(wrt);
signal(mutex);
}

最佳答案

如果您始终有 2 个或更多阅读器处于事件状态,则 signal(wrt) 将永远不会在阅读器 block 的末尾被调用。新读者不会有 readcount == 1 所以他们不会等待 wrt,但他们会增加 readcount。这使得无休止的读取请求使写入线程挨饿。如果读者计数变为 0,则 wrt 将被释放,作者终于可以工作了。在此之前,读者享有优先权。

这并不是一种精确的 LIFO 方法,而是读者优先的优先队列。

关于concurrency - 读者-作者同步问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15932377/

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