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

Python内部是如何存储GC引用变量的计数的?

PHP中文网PHP中文网2741 Il y a quelques jours498

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

  • ringa_lee

    ringa_lee2017-04-18 10:10:49

    C'est plus facile à comprendre. GIL garantit que le code d'octet python n'a qu'un seul thread natif exécuté
    dans le processus en même temps. Cependant, la logique du byte code lui-même nécessite toujours un verrouillage/exclusion mutuelle, etc. pour garantir que le thread peut être réentrant, car le byte code peut être interrompu à tout moment pendant le processus en cours et basculé vers un autre thread.

    Un exemple simple :

    Un morceau de code de compteur :
    //Étape 1
    counter = get_counter()
    //Étape 2
    counter += 1
    / / Étape 3
    set_counter(counter)

    Supposons que le compteur initial soit 0 et que deux threads exécutent ce code Python en même temps sans aucune synchronisation

    Le résultat attendu devrait être que les deux threads ont compté et le compteur final devrait être 2 :<🎜. >
    Cependant, faute de verrouillage/exclusion mutuelle, la situation d'exécution est la suivante :

      Lorsque le thread A termine l'exécution de l'étape 1, le compteur est à 0, ce qui signifie passer au thread B
    1. Le thread B a exécuté avec succès les étapes 1,2,3. Le compteur est maintenant à 1, puis passe à A
    2. .

    3. Le fil A continue d'exécuter l'étape 2 et obtient le compteur à 1, puis l'étape 3 définit le compteur à 1.
    4. Le résultat final est 1.

    répondre
    0
  • Annulerrépondre