Являются ли методы IEnumerable Linq поточно-ориентированными?

Интересно, являются ли методы расширения Linq атомарными? Или мне нужноlock любойIEnumerable Объект используется в потоках, перед любой итерацией?

Объявляет переменную какvolatile иметь какое-либо влияние на это?

Подводя итог, какая из следующих операций является лучшей, поточно-ориентированной операцией?

1- Without any locks:

IEnumerable<T> _objs = //...
var foo = _objs.FirstOrDefault(t => // some condition

2- Including lock statements:

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

Ответы на вопрос(2)

Ваш ответ на вопрос