Vous avez deux choix: le mot-clé est le plus facile volatile
donné votre code présenté. déclarer needsToBeThreadSafe
comme static volatile int
et cela garantira que n'importe quel thread qui référence cette variable obtiendra la "dernière" copie, et la variable ne sera pas mise en cache dans votre code.
Cela dit, si vous voulez vous assurer que plus généralement M1()
et M2()
execute « atomiquement » (ou du moins exclusivement les uns des autres), alors vous voulez utiliser un lock
. La syntaxe est propre avec un « bloc de verrouillage », comme ceci:
private static object locker = new Object();
//..
public static void M1()
{
lock(locker)
{
//..method body here
}
}
public static void M2()
{
lock(locker)
{
//..method body here
}
}
Quant à l'approche à adopter, qui est à vous et doivent être déterminées par le code. Si tout ce dont vous avez besoin est de vous assurer qu'une affectation de membre est propagée à tous les threads et n'est pas mise en cache, le mot-clé volatile
est plus simple et fera l'affaire correctement. Si c'est au-delà, vous voudrez peut-être aller avec le lock
.
Vous voulez dire que vous voulez que les appels à M1() et M2() être atomique? – Bombe
Qu'entendez-vous par "reste thread safe"? –