我不知道Linq擴展方法是原子嗎?或者我需要lock
任何IEnumerable
對象在任何類型的迭代之前在線程中使用?IEnumerable Linq方法是否線程安全?
是否聲明變量爲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-聲明變量作爲揮發性:
volatile IEnumerable<T> _objs = //...
var foo = _objs.FirstOrDefault(t => // some condition
他們不是線程安全的。見http://stackoverflow.com/questions/9995266/how-to-create-a-thread-safe-generic-list – stuartd