c# 高级编程 21章483页 【任务和并行编程】【Interlocked类】

107 阅读1分钟

Interlocked 类

用于 变量的简单语句 原子化

i++

i++ 不是线程安全的:以下操作流程可能会被线程调度器打断

  1. 从内存中取一个值
  2. 该值递增1
  3. 再将结果存储回内存

Interlocked.CompareExchange()

lock(this)
{
    if(_someState = null)
    {
        _someState = new State;
    }
}

以上代码可以用 Interlocked.CompareExchange()方法替代

Interlocked.Increment()

public int State
{
    get {
        lock(this)
        {
            return ++_state;
        }
    }
}

以上代码可以用Interlocked.Increment()方法替代

public int State
{
    get => Interlocked.Increment(ref _state);
}