Maison  >  Questions et réponses  >  le corps du texte

java - Une question sur i++

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

Demandez également : ++i est-il atomique ?

phpcn_u1582phpcn_u15822712 Il y a quelques jours558

répondre à tous(2)je répondrai

  • PHP中文网

    PHP中文网2017-05-17 10:02:27

    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 :

    1. Lire les données de la mémoire pour s'inscrire

    2. Valeur d'enregistrement++

    3. 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. . . . 🎜

    répondre
    0
  • PHP中文网

    PHP中文网2017-05-17 10:02:27

    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.

    répondre
    0
  • Annulerrépondre