5.1.15 线程的互斥锁

from threading import Thread, Lock
import time

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_l = []
    for i in range(100):
        t = Thread(target=task)
        t_l.append(t)
        t.start()

    for t in t_l:
        t.join()

    print('', n)

运行结果:

主 99
View Code

加了互斥锁:

# mutex
from threading import Thread, Lock
import time

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_l
= [] for i in range(100): t = Thread(target=task) t_l.append(t) t.start() for t in t_l: t.join() print('', n)

运行结果:

主 0
View Code

互斥锁的作用:将并行变成串行。保护不同的数据,加不同的锁。

猜你喜欢

转载自www.cnblogs.com/beallaliu/p/9191368.html
今日推荐