"""线程中的锁机制"""
"""
有两个线程A和B,A和B里的程序都加了同一个锁对象,当线程A率先执行到lock.acquire()(拿到全局唯一的锁后).
线程B只能等到线程A释放锁lock.release()后(归还锁)才能运行lock.acquire()(拿到全局唯一的锁)并执行后面的代码
"""
使用锁
lock = threading.Lock() # 生成锁对象,全局唯一
lock.acquire() # 获取锁。未获取到的线程会阻塞程序,直到获取到锁才会往下执行
lock.release() # 释放锁,归回锁,其他线程可以拿去用了
注:lock.acquire() 和 lock.release()必须成对出现。否则就有可能造成死锁
为了避免出现死锁情况,推荐使用上下文管理器来加锁
lock = threading.Lock()
with lock: # with语句会在这个代码块执行前自动获取锁,在执行结束后自动释放锁
# 这里写自己的代码
pass
使用锁的意义? -----------加锁是为了对锁内资源(变量)进行锁定,避免其他线程篡改已被锁定的资源,以达到我们预期
# i = []
# i.pop()
# import threading
# def job1():
# global n
# for i in range(10):
# n += 1
# print('job1', n)
# def job2():
# global n
# for i in range(20):
# n += 10
# print('job2', n)
# n = 0
# threading_01 = threading.Thread(target=job1)
# threading_02 = threading.Thread(target=job2)
# threading_01.start()
# threading_02.start()
加锁之后进行对比
import threading
def job1():