gpt4 book ai didi

java - 请解释这个 put-if-absent 成语中的竞争条件

转载 作者:行者123 更新时间:2023-11-29 06:41:38 28 4
gpt4 key购买 nike

考虑以下代码并假设列表是一个同步列表。

List list = Collections.synchronizedList(new ArrayList());

if(!list.contains(element)){
list.add(element)
}

我知道上面的代码片段需要在外部同步(由锁保护)以使其完全线程安全。竞争条件从哪里来?

最佳答案

实际上有很多。在评估 contains 时,列表可能会发生变化,当您到达 add 时,可能有人已经添加了该元素并且您再次添加了它。此外,如果没有同步,整个事情可能会以奇怪的方式崩溃,因为其他线程的写入可能会被您的线程部分、无序或根本不观察到。

如果 containsadd 本身是原子的(同步的),那么至少在对 contains 的调用之间会有一个定义明确的竞争> 和添加

关于java - 请解释这个 put-if-absent 成语中的竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11262322/

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