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