C#:将易失性字段与互锁配合使用

问题描述

我的理解是,.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 (将#修改为@)