Есть ли разница между C# Volatile.ReadBarrier и Volatile.Read?C#

Место общения программистов C#
Ответить
Anonymous
 Есть ли разница между C# Volatile.ReadBarrier и Volatile.Read?

Сообщение Anonymous »

В выпущенной версии .NET 10 к классу Volatile добавлен новый метод с именем ReadBarrier().
И я не знаю, есть ли с точки зрения компилятора разница, если я выполняю чтение с помощью Volatile.Read() или вместо этого использую Volatile.ReadBarrier() перед чтением.
О чем я думаю это если компилятор точно знает, какие значения должны быть свежими (Read), то он может выбрать сохранение остальных переменных в регистрах ЦП, что было бы невозможно для компилятора в случае метода Volatile.ReadBarrier().
Существует ли такая оптимизация или оба случая будут одинаковыми?
Например, вот метод, который я хочу реализовать с использованием двух разных API:
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void ConcurrentRead(uint ID, ref object value)
{
uint version;
do
{
Volatile.ReadBarrier();

version = _newMap._array[ID].Version;
value = _newMap._array[ID].Value;

Volatile.ReadBarrier();
}
while (version != _newMap._array[ID].Version);

if (_resizeInProgress)
HandleResize(ResizeAction.Read, ref value, ID);
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void ConcurrentRead(uint ID, ref object value)
{
uint versionBefore, versionAfter;
do
{
versionBefore = Volatile.Read(ref _newMap._array[ID].Version);
value = Volatile.Read(ref _newMap._array[ID].Value);
versionAfter = Volatile.Read(ref _newMap._array[ID].Version);
}
while (versionBefore != versionAfter);

if (Volatile.Read(ref _resizeInProgress))
HandleResize(ResizeAction.Read, ref value, ID);
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... atile-read
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»