В выпущенной версии .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
Есть ли разница между C# Volatile.ReadBarrier и Volatile.Read? ⇐ C#
Место общения программистов C#
-
Anonymous
1763546171
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);
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79821554/is-there-a-difference-between-the-c-sharp-volatile-readbarrier-vs-volatile-read[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия