import threading
import time
# 定义全局变量
g_num = 0
# 创建全局互斥锁
mutex = threading.Lock()
# 循环一次给全局变量加1
def task1():
# 上锁
mutex.acquire()
for i in range(10000):
global g_num
g_num += 1
print("1_num:", g_num)
# 释放锁
mutex.release()
# 循环一次给全局变量加1
def task2():
mutex.acquire()
for i in range(10000):
global g_num
g_num += 1
print('2_num:', g_num)
mutex.release()
if __name__ == '__main__':
# 创建子线程
task1_tread = threading.Thread(target=task1)
task2_tread = threading.Thread(target=task2)
# 启动子线程
task2_tread.start()
task1_tread.start()
运行结果:
2_num: 10000
1_num: 20000
通过执行结果可以说明:
互斥锁能够保证同一时刻只能有一个线程去操作共享数据,保证共享数据不会出现错误问题
但是:
互斥锁是多个线程一起去抢,抢到锁的线程先执行,没有抢到锁的线程需要等待,等互斥锁使用完释放后,其它等待的线程再去抢这个锁
使用互斥锁会影响代码的执行效率,多任务改成了单任务执行
版权声明:本文为m0_63385973原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。