互斥锁的使用步骤:
# 创建锁
mutex = threading.Lock()
# 上锁
mutex.acquire()
#这里编写代码保证同一时刻只能有一个线程去操作,对共享数据进行锁定
# 排放锁
mutex.release()
例子:
import threading
# 全局变量
g_num= 0
# 创建互斥锁,Lock本质上是一个函数,通过调用函数创建一个互斥锁
lock= threading.Lock()
def task1():
# 上锁
lock.acquire()
for iin range(10000):
global g_num
g_num+= 1
print("task1:", g_num)
# 释放锁
lock.release()
def task2():
# 上锁
lock.acquire()
for iin range(10000):
global g_num
g_num+= 1
print("task2:", g_num)
# 释放锁
lock.release()
def main():
# target 指定这个线程去哪个函数执行代码
# args 指定调用函数所传递的参数,且 args 需为元组
t1= threading.Thread(target=task1,)
t2= threading.Thread(target=task2,)
t1.start()
# time.sleep(1)
t2.start()
# time.sleep(1)
# 互斥锁可以保证同一时刻只有一个线程去执行代码,能保证全局变量数据的正确
# 线程等待和互斥锁都是把多任务改成单任务去执行,保证了数据的准确性,但执行性能下降
if __name__== '__main__':
main()
网友评论