Нам говорят, что Volatile.Read над Thread.VolatileRead в большинстве случаев из-за того, что последний испускает полный забор, а первый испускает только соответствующую половину ограждения (например, приобретает забор); который более эффективен.
Однако, по моему мнению, Thread.VolatileRead фактически предлагает что-то, что Volatile.Read не делает, из-за реализации Thread.VolatileRead:
public static int VolatileRead(ref int address) {
int num = address;
Thread.MemoryBarrier();
return num;
}
Из-за полного барьера памяти во второй строке реализации, я считаю, что VolatileRead фактически гарантирует, что значение, которое было записано последним на address, будет считано.
Согласно Wikipedia, "Полный забор гарантирует, что все операции загрузки и хранения до забора будут зафиксированы до любых нагрузок и хранилищ выпущенный после ограждения".
Правильно ли я понимаю? И поэтому, Thread.VolatileRead все еще предлагает что-то, что Volatile.Read не делает?