Что такое потокобезопасность (C #)? (Строки, массивы,…?)

Я новичок в 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
 }

Может ли запись и чтение в конкретное поле когда-либо привести к поврежденному чтению (половина поля изменена, а половина все еще не изменилась)?

Спасибо за все ваши ответы и время.

РЕДАКТИРОВАТЬ: Я имел в виду, что все потоки только читают и используют (не записывают и не изменяют) объект. (за исключением последнего вопроса, где очевидно, что я имел в виду, если потоки и читают, и пишут). Потому что я не знаю, является ли простой доступ или перечисление потокобезопасным.

24
задан Gennady Vanin Геннадий Ванин 2 April 2013 в 15:54
поделиться