gpt4 book ai didi

concurrency - 为什么并发控制使用经典的二条件算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:25:47 25 4
gpt4 key购买 nike

在阅读ArrayBlockingQueue 的源代码时,我发现了一条评论,解释说它使用了“任何教科书中都能找到的经典双条件算法”:

/*
* Concurrency control uses the classic two-condition algorithm
* found in any textbook.
*/

/** Main lock guarding all access */
private final ReentrantLock lock;
/** Condition for waiting takes */
private final Condition notEmpty;
/** Condition for waiting puts */
private final Condition notFull;

为什么要用经典的二条件(notEmpty,notFull)算法?

最佳答案

您已经发表了很好的评论。仅作为补充。

ArrayBlockingQueue 是一个State-Dependent 类。这意味着此类具有只能在某些前提条件下执行的操作。

只有前提条件 (notFull) 为假时,写入线程才会等待。

//如果队列已满,则 writer 需要等待。
//原子地释放锁并等待信号(notFull.signal() 由读者触发)。
while (count == items.length)
notFull.await();

对于读者来说,概念是相同的,但使用 notEmpty 条件。

//如果队列为空,则读者需要等待。
//原子地释放锁并等待信号(notEmpty.signal() 由作者触发)。
同时(计数 == 0)
notEmpty.await();

当一个线程被唤醒时,你需要做两件主要的事情:
1 - 获取锁
2 - 重新测试条件

关于concurrency - 为什么并发控制使用经典的二条件算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15988140/

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