并发编程之线程的互斥锁

工作原理是将并行变成局部串行,牺牲了效率,保证了数据的安全。

未加锁:

import time
from threading import Thread

n = 100


def task():
    global n
    # mutex.acquire()
    temp = n
    time.sleep(0.1)
    n = temp - 1
    # mutex.release()


if __name__ == '__main__':
    # mutex = Lock()
    t_1 = []
    for i in range(100):
        t = Thread(target=task)
        t_1.append(t)
        t.start()

    for t in t_1:
        t.join()

    print('主', n)

# 主 99

加锁:

import time
from threading import Thread,Lock

n = 100


def task():
    global n
    mutex.acquire()
    temp = n
    time.sleep(0.1)
    n = temp - 1
    mutex.release()


if __name__ == '__main__':
    mutex = Lock()
    t_1 = []
    for i in range(100):
        t = Thread(target=task)
        t_1.append(t)
        t.start()

    for t in t_1:
        t.join()

    print('主', n)

# 主 
posted @ 2024-01-21 21:56  Xiao0101  阅读(16)  评论(0)    收藏  举报