Допустим, у меня есть структура, состоящая из 100 байтов. Какие гарантии у меня есть по поводу следующего кода?
m_myLargeStruct = someValue; // copying 100 bytes
Thread.MemoryBarrier();
// Executed by another thread, after "Thread.MemoryBarrier" was called by the first thread
Console.WriteLine(m_myLargeStruct.ToString());
Гарантирует ли модель памяти, что 100-байтовая копия будет завершена после установки барьера памяти? или барьеры памяти применяются только к типам, размер которых не превышает размер архитектуры процессора? (4 байта для 32-битных и 8 байтов для 64-битных).
По этой ли причине ключевое слово volatile применяется только к примитивным типам? (если я объявляю 8-байтовый член как изменчивый, это означает, что для изменения его значения будет использоваться заблокированный экземпляр? [поскольку атомарность не гарантируется для типов размером более 4 байтов на 32-битных машинах]).
Надеюсь, я был достаточно ясен .. :)
Спасибо