(一)问题
- 所有的子线程都会进行阻塞操作,导致最后的改变只是改了一次
from threading import Thread
number= 100
def run_task():
global number
# 设置一个线程自己的变量
t_number=number
time.sleep(3)
number=t_number-1
def main_thread():
# 创建线程对象
task_list=[Thread(target=run_task) for i in range(1,4)]
# 开启线程对象
[task.start() for task in task_list]
# 等待线程结束
[task.join() for task in task_list]
# 所有子线程结束后打印number
print(number)
if __name__ == '__main__':
main_thread()
# 99
(二)解决
import time
# 互斥锁:用来修改数据的
# 导入线程模块
from threading import Thread,Lock
lock=Lock()
number= 100
def run_task():
global number
# 要在数据变化之前加锁
lock.acquire()
# 设置一个线程自己的变量
t_number=number
time.sleep(3)
number=t_number-1
# 数据发送变化之后解锁
lock.release()
def main_thread():
# 创建线程对象
task_list=[Thread(target=run_task) for i in range(1,4)]
# 开启线程对象
[task.start() for task in task_list]
# 等待线程结束
[task.join() for task in task_list]
# 所有子线程结束后打印number
print(number)
if __name__ == '__main__':
main_thread()
# 97