Tom*_*ier 11 c# multithreading locking
是否有必要保护对多线程应用程序中引用类型的单个变量的访问?我目前锁定这个变量:
private readonly object _lock = new object();
private MyType _value;
public MyType Value
{
get { lock (_lock) return _value; }
set { lock (_lock) _value = value; }
}
Run Code Online (Sandbox Code Playgroud)
但我想知道这是否真的有必要?是不是将值赋值给字段原子?如果我不锁定这种情况可以出问题吗?
PS:MyType是一个不可变类:所有字段都在构造函数中设置,不会更改.要更改某些内容,将创建一个新实例并将其分配给上面的变量.
Jon*_*eet 10
原子很少就足够了.
我通常希望获得变量的最新值,而不是潜在地看到变量 - 因此需要某种内存屏障,无论是读写还是写入.锁定是实现这一目标的简单方法,代价是由于争用可能会丢失一些性能.
I used to believe that making the variable volatile would be enough in this situation. I'm no longer convinced this is the case. Basically I now try to avoid writing lock-free code when shared data is involved, unless I'm able to use building blocks written by people who really understand these things (e.g. Joe Duffy).
| 归档时间: |
|
| 查看次数: |
582 次 |
| 最近记录: |