我想知道Linq扩展方法是否是原子性的?或者在任何迭代之前,我是否需要锁定跨线程使用的任何IEnumerable对象?
声明变量为volatile是否对此有任何影响?
总之,以下哪种操作是最好的、线程安全的操作?
1-没有任何锁:
声明变量为volatile是否对此有任何影响?
总之,以下哪种操作是最好的、线程安全的操作?
1-没有任何锁:
IEnumerable<T> _objs = //...
var foo = _objs.FirstOrDefault(t => // some condition
2- 包括锁定语句:
IEnumerable<T> _objs = //...
lock(_objs)
{
var foo = _objs.FirstOrDefault(t => // some condition
}
3- Declaring variable as volatile:
volatile IEnumerable<T> _objs = //...
var foo = _objs.FirstOrDefault(t => // some condition