До тех пор, пока значение вашего общего поля только увеличивается, вы можете сделать что-то подобное с комбинацией Read
и CompareExchange
.
long sharedVal = Interlocked.Read(ref _sharedField);
while (localVal > sharedVal)
{
long temp = Interlocked.CompareExchange(ref _sharedField, localVal, sharedVal);
sharedVal = (temp == sharedVal) ? localVal : temp;
}
Однако в этой ситуации я бы выбрал простой lock
: использование Interlocked
, как этот, менее читабельно, чем блок lock
, и также может привести к гораздо более низкой производительности.