递归锁能够保证线程之间改变变量的独立性,
多个线程共同修改一个变量时一定要加上递归锁
# Author : Xuefeng
# 导入必要的模块
import threading,time
def run1():
'''
定义第一个程序来创建一个修改参数的线程
:return:
'''
print("Grab the first part data.")
lock.acquire()
global num
num += 1
lock.release()
return num
def run2():
'''
定义第二个程序来创建一个修改参数的线程
:return:
'''
print("Grab the second part data.")
lock.acquire()
global num2
num2 += 1
lock.release()
return num2
def run3():
'''
定义第三个程序来创建一个修改参数的线程
:return:
'''
lock.acquire()
res = run1()
print("----------Between run1 and run2------------- ")
res2 = run2()
print(res, res2)
lock.release()
# 初始化主线程中的变量
num, num2 = 0, 0
# 实例化递归锁
lock = threading.RLock()
# 循环创建线程改变参数
for i in range(9):
t = threading.Thread(target=run3)
t.start()
# 判断线程是否都执行结束
while threading.active_count() != 1:
print(threading.active_count())
else:
print("--------All threads done--------")
print(num, num2)
1716

被折叠的 条评论
为什么被折叠?



