Keadaan perlumbaan dalam Python merujuk kepada perkara yang berlaku apabila dua atau lebih utas atau proses cuba mengakses dan mengubah suai sumber kongsi yang sama pada masa yang sama Gelagat program bergantung pada masa pelaksanaannya.
Punca: Kekurangan mekanisme penyegerakan yang betul.
Kesan: Menyebabkan keputusan yang tidak dapat diramalkan atau tidak betul apabila benang "berlumba-lumba" untuk menyelesaikan operasinya terlebih dahulu.
Contoh:
<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>
Lock
atau RLock
) untuk memastikan hanya satu utas mengakses bahagian kritikal pada satu masa. <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>
Atas ialah kandungan terperinci Keadaan Perlumbaan dalam Python.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!