Как выглядит следующий демо-код? Мы гарантируем, не изменится ли значение в инструкции CAS, а затем выполняется инкремент по int. Не делает return v + 1;
шаг, избили всю цель, поскольку он может пропустить обновления потоков.Использование compareAndSet для обеспечения безопасности нитей
Здесь атомное целое используется для имитации неблокирующего счетчика int.
//Here value is an atomic integer
public int increment()
{
int v;
for(;;)
{
v = value.get();
if(value.compareAndSet(v, v + 1))
return v + 1;
}
}
не должны код выглядеть так:
public int increment()
{
int v;
for(;;)
{
v = value.get();
if(value.compareAndSet(v, v + 1))
return value.get();
}
}