import time
import threading
lock = threading.RLock()
n = 10
def task(arg):
# 加锁,此区域的代码同一时刻只能有一个线程执行
lock.acquire()
# 获取当前线程对象
thread_obj = threading.current_thread()
# 获取当前线程名字
name = thread_obj.getName()
global n
n = arg
time.sleep(1)
print('当前线程', name, '修改后n的值为:', n)
# 释放锁
lock.release()
for i in range(5):
t = threading.Thread(target=task, args=(i,))
t.setName(str(i))
t.start()
'''
期望结果-->加锁情况:
当前线程 0 修改后n的值为: 0
当前线程 1 修改后n的值为: 1
当前线程 2 修改后n的值为: 2
当前线程 3 修改后n的值为: 3
当前线程 4 修改后n的值为: 4
'''
'''
不期望结果-->没加锁情况
当前线程 0 修改后n的值为: 4
当前线程 1 修改后n的值为: 4
当前线程 2 修改后n的值为: 4
当前线程 3 修改后n的值为: 4
当前线程 4 修改后n的值为: 4
'''