gpt4 book ai didi

java - 增量操作的原子性

转载 作者:行者123 更新时间:2023-12-02 04:29:47 25 4
gpt4 key购买 nike

我正在通过《Java 并发实践》学习多线程编程。

在某一点上,书上说,即使是看起来无害的增量操作也不是线程安全的,因为它由三个不同的操作组成……读取、修改和写入。

class A {
private void int c;

public void increment() {
++c;
}
}

因此增量语句不是原子的,因此不是线程安全的。

我的问题是,如果一个环境确实是并发的(即多个线程能够完全同时执行其程序语句),那么真正原子的语句也不能是线程安全的,因为多个线程可以读取相同的值。那么原子语句如何有助于在并发环境中实现线程安全呢?

最佳答案

在修改状态时,不存在真正的并发。

This post对并发和并行性有一些很好的描述。

正如 @RitchieHindle 在那篇文章中所述:

Concurrency is when two tasks can start, run, and complete in overlapping time periods. It doesn't necessarily mean they'll ever both be running at the same instant. Eg. multitasking on a single-core machine.

举个例子,非原子操作的危险在于,一个线程可能会读取该值,另一个线程可能会修改该值,然后原始线程可能会修改并写入该值(从而否定第二个线程所做的修改) 。

原子操作不允许其他操作在原子操作过程中访问状态。例如,如果增量运算符是原子的,则在发生这些操作时,它将读取、修改和写入,而无需任何其他线程访问该变量状态。

关于java - 增量操作的原子性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31623142/

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