Czy metody IEnumerable Linq są bezpieczne dla wątków?

Zastanawiam się, czy metody rozszerzenia Linq są atomowe? Czy muszę to zrobić?lock każdyIEnumerable obiekt używany w wątkach, przed jakąkolwiek iteracją?

Czy deklaruje zmienną jakovolatile mieć na to jakiś wpływ?

Podsumowując, która z poniższych jest najlepsza, bezpieczna w wątku, operacja?

1- Bez żadnych zamków:

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

2- W tym instrukcje blokady:

IEnumerable<T> _objs = //...
lock(_objs)
{
    var foo = _objs.FirstOrDefault(t => // some condition
}

3- Deklarowanie zmiennej jako lotnej:

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

questionAnswers(2)

yourAnswerToTheQuestion