在多线程编程中,避免线程交错的一种常见方法是使用互斥锁(Mutex)。互斥锁可以确保在同一时间只有一个线程能够访问共享资源,从而避免了线程之间的交错。
以下是一个使用互斥锁解决线程交错问题的示例代码:
import threading
# 共享资源
shared_resource = 0
# 创建一个互斥锁
mutex = threading.Lock()
# 线程函数
def increment():
global shared_resource
# 上锁
mutex.acquire()
try:
# 访问共享资源
shared_resource += 1
finally:
# 释放锁
mutex.release()
# 创建多个线程并启动
threads = []
for _ in range(5):
t = threading.Thread(target=increment)
t.start()
threads.append(t)
# 等待所有线程执行完毕
for t in threads:
t.join()
# 打印最终结果
print("shared_resource:", shared_resource)
在这个示例中,我们定义了一个共享资源shared_resource
,并创建了一个互斥锁mutex
。在每个线程的函数中,我们首先使用mutex.acquire()
上锁,然后访问共享资源,最后使用mutex.release()
释放锁。这样,每次只有一个线程能够获取到锁并修改共享资源,其他线程则需要等待锁释放。
通过使用互斥锁,我们可以确保每个线程都能够按顺序访问共享资源,从而避免了线程交错的问题。最终输出的shared_resource
的值应该是5,而不是小于5的任意值。