Maison >développement back-end >Tutoriel Python >Condition de course en Python.

Condition de course en Python.

Barbara Streisand
Barbara Streisandoriginal
2025-01-24 18:11:10354parcourir

Race Condition in Python.

Une condition de concurrence critique en Python fait référence à ce qui se produit lorsque deux ou plusieurs threads ou processus tentent d'accéder et de modifier la même ressource partagée en même temps. Le comportement du programme dépend de leur timing d'exécution.

Points clés :

  1. Cause : Manque de mécanisme de synchronisation approprié.

  2. Impact : provoque des résultats imprévisibles ou incorrects lorsque les threads « se précipitent » pour terminer leurs opérations en premier.

  3. Exemple :

    • Deux fils tentent de mettre à jour le compteur partagé :
    <code class="language-python">counter = 0
    
    def increment():
        global counter
        for _ in range(1000):
            counter += 1  # 此处不是线程安全的
    
    thread1 = threading.Thread(target=increment)
    thread2 = threading.Thread(target=increment)
    
    thread1.start()
    thread2.start()
    thread1.join()
    thread2.join()
    
    print(counter)  # 输出可能会有所不同,并且小于 2000</code>
    • En raison du manque de synchronisation appropriée, les résultats sont imprévisibles car les threads interfèrent les uns avec les autres.

Comment prévenir :

  • Utilisez un verrou (par exemple, Lock ou RLock) pour garantir qu'un seul thread accède à la section critique à la fois.
  • Exemple d'utilisation du verrouillage :
<code class="language-python">import threading

counter = 0
lock = threading.Lock()

def increment():
    global counter
    for _ in range(1000):
        with lock:  # 确保一次只有一个线程访问此代码块
            counter += 1

thread1 = threading.Thread(target=increment)
thread2 = threading.Thread(target=increment)

thread1.start()
thread2.start()
thread1.join()
thread2.join()

print(counter)  # 输出将始终为 2000</code>

Compétences en entretien :

  • Cela est dû à un accès asynchrone à une ressource partagée.
  • Toujours mentionner le mécanisme de verrouillage ou de synchronisation pour l'empêcher.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn