изредка, так что лучше вообще его избегать.)
ел несколько вопросов на эту же тему, но связанных с общими переменными (значения и ссылочные типы). Ответ принятэтот вопрос говорит:
Раздел I, раздел 12.6.6 спецификации CLI гласит: «Соответствующий CLI должен гарантировать, что доступ для чтения и записи к правильно выровненным ячейкам памяти, не превышающим размер собственного слова, является атомарным, когда все обращения к записи в расположении имеют одинаковый размер «.
Ссылочные переменные (то есть классы) - это указатели, равные собственному размеру слова, но у меня есть пара сомнений:
Гарантированно ли ссылки находятся в правильно выровненных ячейках памяти?
Я не понимаю последнюю часть. Что это значит?«... когда все доступы для записи в одно и то же место».
Короче говоря, гарантированно ли obj2 действителен на каждой итерации цикла в следующем коде?
class MyClass
{
private OtherClass m_Object;
void Thread1()
{
while(true)
{
OtherClass obj1 = new OtherClass();
m_Object = obj1;
}
}
void Thread2()
{
while (true)
{
OtherClass obj2 = m_Object;
// Is obj2 guaranteed to be valid?
obj2.Check();
}
}
}