Я новичок в C #, так что, пожалуйста, потерпите меня. Я немного сбит с толку с безопасностью потоков. Когда что-то потокобезопасное, а когда что-то нет t?
Всегда ли чтение (просто чтение из того, что было инициализировано ранее) из поля всегда потокобезопасно?
//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
}
Может ли запись и чтение в конкретное поле когда-либо привести к поврежденному чтению (половина поля изменена, а половина все еще не изменилась)?
Спасибо за все ваши ответы и время.
РЕДАКТИРОВАТЬ: Я имел в виду, что все потоки только читают и используют (не записывают и не изменяют) объект. (за исключением последнего вопроса, где очевидно, что я имел в виду, если потоки и читают, и пишут). Потому что я не знаю, является ли простой доступ или перечисление потокобезопасным.