Utilisez 2 threads pour incrémenter automatiquement (i++) i=1, et chaque thread l'exécute 100 fois Quelles sont les valeurs maximales et minimales possibles ? Merci de donner une explication
Le minimum peut être 3, soit +2, et le maximum peut être 201, soit +200. . . . Pourquoi je ne pars pas de 0. . .
Un processus cyclique est :
Lire les données de la mémoire pour s'inscrire
Valeur d'enregistrement++
Réécrire les données en mémoire
Un fil de discussion peut être interrompu dans l'une de ces trois étapes. Le cas de 3 est : Le premier thread lit les données 1, puis est suspendu et la valeur du registre est enregistrée à un autre endroit. 1,然后被挂起,寄存器的值被保存到另一个地方。 第二个线程,持续执行了 99 次(此时,内存中的值为 100),然后被挂起。 第一个线程被唤醒,恢复寄存器的 1 +1 之后 (=2)被写回内存,该线程被挂起 第二个线程从内存读取2到寄存器之后被挂起 第一个全部执行完,把值写回内存 唤起第二个线程,恢复寄存器中的2,完成最后一次循环+1 之后写回 3
所以最终结果是 3Le deuxième thread a continué à s'exécuter 99 fois (à ce moment-là, la valeur en mémoire était 100), puis a été suspendu.
Le premier thread est réveillé, et après que le 1 +1 du registre de récupération (=2) soit réécrit dans la mémoire, le thread est suspendu
Le premier Les deux threads lisent 2 de la mémoire dans le registre et sont suspendus. Le premier est entièrement exécuté et réécrit la valeur dans la mémoire.
Avoque le deuxième thread. et restaure la valeur dans le registre 2, réécrivez 3 après avoir terminé la dernière boucle +1
.
🎜Le résultat final est donc 3. . . . 🎜
🎜Je n’ai pas encore pensé à une méthode de planification plus petite. . . 🎜
🎜La valeur maximale n'a pas besoin d'être trop expliquée. . . . 🎜
La valeur minimale est 2 et la valeur maximale est 200. 2 signifie que les deux threads modifient les données dans le cache CPU, et au final la mémoire n'est rafraîchie qu'une seule fois. 200 signifie que les deux threads lisent et modifient alternativement sans se faire concurrence. Nous avons tous posé des questions sur les valeurs maximales et minimales, mais naturellement elles ne sont pas atomiques.
Le minimum peut être 3, soit +2, et le maximum peut être 201, soit +200. . . . Pourquoi je ne pars pas de 0. . .
Un processus cyclique est :
Lire les données de la mémoire pour s'inscrire
Valeur d'enregistrement++
Réécrire les données en mémoire
Un fil de discussion peut être interrompu dans l'une de ces trois étapes. Le cas de 3 est :
Le premier thread lit les données
1
, puis est suspendu et la valeur du registre est enregistrée à un autre endroit.1
,然后被挂起,寄存器的值被保存到另一个地方。第二个线程,持续执行了 99 次(此时,内存中的值为
100
),然后被挂起。第一个线程被唤醒,恢复寄存器的
1
+1 之后 (=2
)被写回内存,该线程被挂起第二个线程从内存读取
2
到寄存器之后被挂起第一个全部执行完,把值写回内存
唤起第二个线程,恢复寄存器中的
2
,完成最后一次循环+1 之后写回 3所以最终结果是
3
Le deuxième thread a continué à s'exécuter 99 fois (à ce moment-là, la valeur en mémoire était100
), puis a été suspendu.Le premier thread est réveillé, et après que le
Le premier Les deux threads lisent1
+1 du registre de récupération (=2
) soit réécrit dans la mémoire, le thread est suspendu2
de la mémoire dans le registre et sont suspendus. Le premier est entièrement exécuté et réécrit la valeur dans la mémoire.Avoque le deuxième thread. et restaure la valeur dans le registre
. 🎜Le résultat final est donc2
, réécrivez 3 après avoir terminé la dernière boucle +13
. . . . 🎜 🎜Je n’ai pas encore pensé à une méthode de planification plus petite. . . 🎜 🎜La valeur maximale n'a pas besoin d'être trop expliquée. . . . 🎜La valeur minimale est 2 et la valeur maximale est 200.
2 signifie que les deux threads modifient les données dans le cache CPU, et au final la mémoire n'est rafraîchie qu'une seule fois.
200 signifie que les deux threads lisent et modifient alternativement sans se faire concurrence.
Nous avons tous posé des questions sur les valeurs maximales et minimales, mais naturellement elles ne sont pas atomiques.