En Java, la valeur d'une variable partagée dans un thread peut rester bloquée à moins que vous n'utilisiez des opérations atomiques ou d'autres mécanismes de synchronisation de thread.
Compte tenu du GIL dans CPython. Je vois de la valeur dans Lock inc où :
Même dans l’expression déroutante du a += 1
, plusieurs étapes sont effectuées avant d’attribuer une valeur. Pour éviter les conditions de course.
Mais dans un cas comme a = 1
, il n'y a pas de verrou. Après qu'un thread ait mis à jour a, est-il possible que les threads A et B lisent des valeurs différentes de a ?
Une autre façon de poser cette question est la suivante : Lock assure-t-il la propagation des valeurs partagées, alors que l'absence de Lock ne le fait pas ?
Le problème n'est pas a = 1
。如果您在整个代码中所做的唯一一件事是将 a
. Si la seule chose que vous faites dans l'ensemble de votre code est de définir a
sur différentes valeurs, alors vous n'avez pas besoin de verrou.
Cependant, si vous définissez a = 1
的同时,代码中的其他地方正在执行 a = a + 1
,那么您需要锁定它们。您锁定了 a = 1
,这样如果其他人递增 a
,它将完全在您设置 a
alors qu'ailleurs dans votre code, vous faites a = a + 1
, alors vous devez les verrouiller. Vous verrouillez
a
, cela se produira exactement avant ou après que vous ayez défini a
. Donc dans presque tous les cas, à moins de savoir vraiment ce que l'on fait, une serrure est la solution la plus simple. 🎜
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!