Я новичок в С#, поэтому, пожалуйста, несите меня. Я немного путаюсь с безопасностью потока. Когда что-то потокобезопасно, а когда что-то не так?
Является чтением (только чтение из чего-то, что было инициализировано ранее) из поля, всегда безопасного потока?
//EXAMPLE
RSACryptoServiceProvider rsa = new RSACrytoServiceProvider();
rsa.FromXmlString(xmlString);
//Is this thread safe if xml String is predifined
//and this code can be called from multiple threads?
Является доступ к объекту из массива или списку всегда потокобезопасным (если вы используете цикл for для перечисления)?
//EXAMPLE (a is local to thread, array and list are global)
int a = 0;
for(int i=0; i<10; i++)
{
a += array[i];
a -= list.ElementAt(i);
}
Является перечислением всегда/когда-либо потокобезопасным?
//EXAMPLE
foreach(Object o in list)
{
//do something with o
}
Может ли писать и читать в какое-либо конкретное поле когда-либо приводить к поврежденному чтению (половина поля изменяется, а половина по-прежнему остается неизменной)?
Спасибо за все ваши ответы и время.
EDIT: Я имел в виду, что все потоки только читают и используют (не записывая или изменяя) объект. (за исключением последнего вопроса, когда очевидно, что я имел в виду, что потоки читаются и записываются). Потому что я не знаю, является ли простой доступ или перечисление потокобезопасным.