Python之多线程编程第1关:线程同步之报数
时间: 2024-12-19 19:27:39 浏览: 29
在Python中,多线程编程涉及到线程间的协作和同步,因为如果两个线程同时访问共享资源,可能会导致数据不一致的问题。"报数"是一个常见的例子,通常用于演示互斥锁(mutex)的概念,也就是保证同一时间只有一个线程能访问特定代码块。
当两个线程同时从0开始报数并试图打印数字,如果没有同步机制,可能会出现交错的输出。例如,线程A可能先打印出1,然后线程B接着打印出0,而不是按照顺序1, 2交替打印。
为了解决这个问题,可以使用threading.Lock()
创建一个互斥锁。每个线程在进入需要同步的代码段前获取锁,在离开时释放锁。下面是一个简单的示例:
import threading
counter = 0
lock = threading.Lock()
def count_up(n):
global counter
for _ in range(n):
with lock:
current_count = counter
print(f"Thread {threading.current_thread().name}: {current_count}")
counter += 1
# 创建两个线程
t1 = threading.Thread(target=count_up, args=(5,))
t2 = threading.Thread(target=count_up, args=(7,))
# 启动线程
t1.start()
t2.start()
# 等待所有线程结束
t1.join()
t2.join()
在这个例子中,with lock:
确保了在同一时刻只有一个线程能够增加计数器,实现了线程之间的同步。
相关推荐






