gpt4 book ai didi

非 volatile 对象中的java volatile 对象

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:44:58 28 4
gpt4 key购买 nike

// structure is like this, but not exact formation.
class queue
{
volatile List<pieceOfWork> worksWaiting;
}

List<queue> qs; // pieceOfWork has only some primitive arrays and strings.

同时从 N 个线程读取/写入(不是销毁,不是创建)“Qs”的元素是否安全?

“WorksWaiting”用于在 Controller 线程(1 或 2)和受控线程 (N) 之间同步,而 N 控制并发读取/写入队列。

队列的删除/创建将由 Controller 线程完成。

谢谢。

 th read   th write 
(cpu sse) (gpu opencl executor)
^ ^
| |
W W W W W W ....w<--- controller thread adding new works to queue and
deleting finished ones.
also splits a work item if
it is not finished in short time.

最佳答案

只要队列的referece 不变(即您在执行期间不创建和使用新队列),它就不必是易变的(没有区别) ).同样,如果对队列内部列表的引用没有改变(即您在执行期间不创建和使用新列表),则列表不必是易变的(它也没有区别)

重要的是 list 是一个线程安全的实现——它的内部变量是易变的,它的代码是按要求同步的等等,因为它是列表的引用保持(对工作对象)及其将发生变异的内部结构,并且这些变化需要对所有线程可见( volatile )。

您的代码无关紧要 - 列表 需要线程安全。

关于非 volatile 对象中的java volatile 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27179372/

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