问题描述
我的理解是,.NET中的所有Interlocked
API都会引入完整的内存防护。但是,我仍然看到许多示例,其中引入volatile
(它引入了半栅栏)与Interlocked
结合使用。例如Task.Id
:
https://source.dot.net/#System.Private.CoreLib/Task.cs,784864bc4dc294af
private volatile int m_taskId;
public int Id
{
get
{
if (m_taskId == 0)
{
int newId = NewId();
Interlocked.CompareExchange(ref m_taskId,newId,0);
}
return m_taskId;
}
}
在这种情况下,volatile
实际在做什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)