互斥锁

一、互斥锁介绍及特点

  

  说明:对共享数据进行锁定,保证同一时刻只有一个线程去操作。

  特点:

    互斥锁是多个线程一起去抢。

    谁先抢到锁是由CPU的调度决定的

    没有抢到锁的线程需要等待,此时进入阻塞状态。

    互斥锁使用完释放后,其它等待的线程会再去抢这个锁

二、语法

  

  

  import threading

  # 创建锁

  锁对象 = threading.Lock()

  # 上锁

  锁对象.acquire()

  # 释放锁

  锁对象.release()

三、互斥锁的使用

  1、使用互斥锁

  

from threading import Thread,Lock
from time import time

g_num = 0

# 1.创建锁
mutex = Lock()


def sum_num1():
    # 2.在需要操作的数据位置上锁
    mutex.acquire()

    for i in range(1000000):
        global g_num
        g_num += 1

    print("sum1:", g_num)

    # 3.释放锁
    mutex.release()


def sum_num2():
    # 上锁
    mutex.acquire()
    for i in range(1000000):
        global g_num
        g_num += 1
    print("sum2:", g_num)

    # 释放锁
    mutex.release()


if __name__ == '__main__':
    t1 = Thread(target=sum_num1)
    t2 = Thread(target=sum_num2)

    t1.start()
    t2.start()
View Code

运行结果:

四、使用线程等待或互斥锁的优缺点

  优点:保证了数据的准确性

  缺点:将多任务转换成单任务去执行,执行性能下降。

  

  

原文地址:https://www.cnblogs.com/yujiemeigui/p/14304970.html