Comment le code de démonstration suivant est-il compatible avec les threads? Nous vérifions si la valeur n'est pas modifiée dans l'instruction CAS et si nous faisons un incrément sur int. Ne pas return v + 1;
étape battre le but entier car il peut ignorer les mises à jour des discussions.Utilisation de compareAndSet pour la sécurité des threads
Ici, un entier atomique est utilisé pour imiter un compteur int non bloquant.
//Here value is an atomic integer
public int increment()
{
int v;
for(;;)
{
v = value.get();
if(value.compareAndSet(v, v + 1))
return v + 1;
}
}
Si pas le code comme ceci:
public int increment()
{
int v;
for(;;)
{
v = value.get();
if(value.compareAndSet(v, v + 1))
return value.get();
}
}