Должен ли Interlocked.comPareExchange также нестабильная переменная?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Должен ли Interlocked.comPareExchange также нестабильная переменная?

Сообщение Anonymous »

Следующий пример поступает из MSDN. < /p>
public class ThreadSafe
{
// Field totalValue contains a running total that can be updated
// by multiple threads. It must be protected from unsynchronized
// access.
private float totalValue = 0.0F;

// The Total property returns the running total.
public float Total { get { return totalValue; }}

// AddToTotal safely adds a value to the running total.
public float AddToTotal(float addend)
{
float initialValue, computedValue;
do
{
// Save the current running total in a local variable.
initialValue = totalValue;

// Add the new value to the running total.
computedValue = initialValue + addend;

// CompareExchange compares totalValue to initialValue. If
// they are not equal, then another thread has updated the
// running total since this loop started. CompareExchange
// does not update totalValue. CompareExchange returns the
// contents of totalValue, which do not equal initialValue,
// so the loop executes again.
}
while (initialValue != Interlocked.CompareExchange(ref totalValue,
computedValue, initialValue));
// If no other thread updated the running total, then
// totalValue and initialValue are equal when CompareExchange
// compares them, and computedValue is stored in totalValue.
// CompareExchange returns the value that was in totalValue
// before the update, which is equal to initialValue, so the
// loop ends.

// The function returns computedValue, not totalValue, because
// totalValue could be changed by another thread between
// the time the loop ends and the function returns.
return computedValue;
}
}
< /code>
Должны ли общая стоимость не быть объявлено как летучим, чтобы получить самое свежее значение? Я полагаю, что если вы получите грязное значение от кэша процессора, то звонок к Interlocked.comPareExchange должен позаботиться о получении самой свежей стоимости и приведет к тому, что цикл попытается попробовать еще раз. Будет ли измененное ключевое слово потенциально сохранить один ненужный цикл? Поддержите летучие ключевое слово.

Подробнее здесь: https://stackoverflow.com/questions/664 ... e-variable
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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