我有一个代码如下的类
private readonly object m_lock = new object();
private IClient m_client
private object m_context;
设置客户端和上下文时,我锁定如下
lock(m_lock)
{
m_client = theClientFromSomewhere;
m_context = contextObject;
}
我的问题是,如果我只需要自己获取m_client
,这样做是否安全?
var localClient = m_client;
Debug.Assert(localClient != null);
localClient.DoStuff();
m_client
是引用类型,因此读取(分配给时localClient
)保证是 atomic,所以这应该在单个 CPU 上正常工作。
我可以(在理论上)创建m_client
变量volatile
,然后通过防止其他 CPU 的乱序读取,这在多个 cpu 之间是安全的,但问题是,写入时锁定是否可以安全地读取不稳定?
写入“刷新”CPU缓存时是否锁定,以便在读取时不会出现乱序?