一、示例代码:
from threading import Thread
from threading import Lock
import time
n = 100 # 共100张票
def task():
global n
mutex.acquire() # 上锁
temp = n
time.sleep(0.1)
n = temp - 1
print('购票成功,剩余%d张余票!' % n)
mutex.release() # 释放锁
if __name__ == '__main__':
mutex = Lock() # 实例化Lock类
thread_list = [] # 初始化列表
for i in range(100):
t = Thread(target=task) # 实例化线程类
thread_list.append(t) # 线程实例加入列表
t.start() # 创建线程
for t in thread_list:
t.join() # 等待子线程结束
二、方法注释:
threading模块中使用Lock类方便的处理锁定。Lock类的两个方法:acquire()上锁与release()释放锁。
三、代码说明:
创建100个线程,全部执行task函数,为解决资源竞争问题,使用mutex.acquire()方法实现资源的锁定,第一个获取资源的线程锁定后,其他线程等待mutex.release()解锁释放资源。所以每次只有一个线程执行task()函数。
四、运行结果: