gpt4 book ai didi

c# - 这个双重检查锁是否需要 volatile 关键字才能工作?

转载 作者:行者123 更新时间:2023-11-30 18:41:35 26 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
The need for volatile modifier in double checked locking in .NET

给定以下代码片段,一次可以由多个线程执行,是否需要 volatile 关键字来确保始终从内存中读取 connected 的“实际值”而不是缓存?

(假设 Disconnect() 只会被调用一次(即如果它第一次没有正常工作并且 connected 的值被读取为 false,不会再尝试了))。

public class MyClass
{
private readonly object syncRoot = new object();

private bool connected;

public void Disconnect()
{
if (connected)
{
lock (syncRoot)
{
if (connected)
{
// log off here
// ...
connected = false;
}
}
}
}

public void Connect()
{
lock (syncRoot)
{
// blah
// blah
connected = true;
}
}
}

我的感觉是,如果使用双重检查锁定,那么它确实需要标记为 volatile,因为如果它第一次读取不正确的值,那么它会认为它实际上已断开连接并且不会进入 lock 语句。我还认为,在这种情况下,双重检查锁定是不合适的/不会提供任何性能提升,只需一个普通的锁就可以完成这项工作。

我希望有人证实或否认这些想法。

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