Skip to content

AQS详解中关于成员变量state的volatile修饰的功能的解释错误 #2516

Open
@zxpzxpzxpzxpzxp

Description

@zxpzxpzxpzxpzxp

AQS详解中,介绍AQS的成员变量state由 volatile 修饰,其中volatile的作用是使用volatile修饰保证线程可见性.
实际上使用 volatile 修饰状态变量不是为了利用 volatile 的内存可见性,因为这个状态变量只会被持有该状态变量的线程写入,只会被队列中该线程的后驱节点对应的线程读,而且后者会轮询读取。
但要实现一个可以在多线程程序中正确执行的锁,还需要解决重排序问题。主要是通过 volatile 的 Happens-Before(先行发生)规则来解决重排序问题。JMM 的 Happens-Before(先行发生)规则有一条针对 volatile 关键字的规则:“volatile 变量的写操作发生在该变量的后续读之前”。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions