1. 程式人生 > 其它 >Python——Lock(鎖)

Python——Lock(鎖)

鎖是為了可能出現的資料不同步或資料不對稱問題的解決方法,如果需要大量的使用者訪問相同資料時,為了資料的一致性和安全。那麼就需要加鎖。

概念:

鎖相當於是將使用者訪問需求進行佇列化,即第一個使用者訪問時,後續使用者無法進行相同資料的訪問。直到第一個使用者訪問完成後,由佇列中的第二個使用者繼續訪問。

互斥鎖

特點:

1. 兩種表現形式,with和acquire,release

2. 在用一個執行緒中,不能連續acquire多次(程序會卡在這),必須要進行release後才能繼續acquire(會報錯,RuntimeError: release unlocked lock)

3. 在操作全域性變數和+=,-=,*=,/=這類計算在賦值類,或lis[0]+=1,dic['key']-=1這類時,就會出現資料不一致的問題。

from threading import Thread,Lock

a = 1
def func1(lock):
    with lock:
        for i in range(100000):
            global a
            a -= 1
def func2(lock):
    with lock:
        for i in range(100000):
            global a
            a += 1
lock = Lock()
t1 = Thread(target=func1,args=(lock,))
t2 = Thread(target=func2,args=(lock,))
t1.start()
t2.start()
t1.join()
t2.join()
print(a)

 

from Threading import Lock
lock = Lock()
lock.acquire()
print(1)
lock.acquire()  
print(2)
'''
1
'''