在Python中,线程锁是一种同步原语,用于控制多个线程对共享资源的访问。线程锁的主要目的是确保在任何给定的时刻只有一个线程可以访问共享资源,以避免竞争条件和数据不一致性。
使用线程锁的一般步骤如下:
threading.Lock()
函数来创建一个新的锁对象。acquire()
方法,线程可以尝试获取锁。如果锁当前没有被其他线程持有,则线程将获得锁,并继续执行。否则,线程将被阻塞,直到锁被释放。release()
方法,线程可以释放锁,使其他线程有机会获得锁并执行访问共享资源的操作。下面是一个使用线程锁的简单示例:
import threading
# 创建一个锁对象
lock = threading.Lock()
# 共享资源
count = 0
def increment():
global count
for _ in range(1000000):
# 获取锁
lock.acquire()
try:
count += 1
finally:
# 释放锁
lock.release()
# 创建多个线程并启动
threads = []
for _ in range(5):
t = threading.Thread(target=increment)
t.start()
threads.append(t)
# 等待所有线程执行完毕
for t in threads:
t.join()
print(count) # 输出:5000000
在上面的示例中,多个线程同时对count
变量进行自增操作,通过使用线程锁,确保了每次自增操作只有一个线程可以执行,避免了竞争条件和数据不一致性的问题。