线程 -- 互斥锁

2020-07-28  本文已影响0人  glRu

互斥锁的使用步骤:

# 创建锁

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()

上一篇 下一篇

猜你喜欢

热点阅读