gpt4 book ai didi

c++ - 我们是否需要将 volatile 关键字和互斥锁一起用于线程安全?

转载 作者:行者123 更新时间:2023-11-30 00:56:19 26 4
gpt4 key购买 nike

为临界区设置互斥锁表明不止一个线程无法破坏临界区,但为什么我们需要 volatile 变量来做同样的事情?

如果下面的代码中没有volatile字会怎样?

enter image description here

最佳答案

volatile 关键字使双重检查锁定在 1.5 及更高版本的 JVM 上正常工作,请参阅 Under the new Java Memory Model该页面的一部分。

如果没有 volatile 关键字,则可能会在 1.5 及更高版本的 JVM 上创建两个实例。在 1.5 之前的 JVM 上,双重检查锁定被认为是完全错误的,不应使用。

然而,在初始化单例的情况下,使用双重检查锁定通常被认为是不值得的,简单的静态初始化就足够了。如果您绝对知道您的应用程序会在某个时候初始化单例,那么惰性实例化就是多余的。只是去:

private static Singleton s_instance = new Singleton() 

或任何 C++ 等价物。又好又安全!

由于这个问题最终导致了 Java 和 C++ 的困惑,请注意,我指的是上面的 Java。 C++中没有synchronized关键字,volatile不适用于并发。

关于c++ - 我们是否需要将 volatile 关键字和互斥锁一起用于线程安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10480153/

26 4 0