1. 程式人生 > >python之迭代鎖與訊號量

python之迭代鎖與訊號量

如果現在需要在多處加鎖大於等於2的時候 因為計算機比較笨,當他鎖上一把鎖的時候又所理一把鎖,等他來開鎖的時候他不知道用哪把鑰匙來開鎖,

所以這個時候我們需要把把平常的鎖變為迭代鎖

eg:

import threading
import time

local = threading.RLock()
# 迭代加鎖首先生成例項
def run(name):
    global num
    local.acquire()  # 上鎖
    num += 1
    run2(num)
    local.release()  # 解鎖
    print(threading.active_count())

def run2(num): local.acquire() num += 1 run3(num) local.release() def run3(num): local.acquire() num+=1 local.release() num = 0 py_res = [] for i in range(50): t = threading.Thread(target=run,args=('t%s'%i,)) py_res.append(t) t.start() for i in py_res: i.join()
print("num : %s"% num)

型號量可以控制同線程的個數,和鎖的用法一樣

import threading
import time
senm = threading.BoundedSemaphore(5)
def run(num):
    senm.acquire()  # 上鎖
    time.sleep(2)
    print('run the thread %s' % num)
    senm.release()  # 解鎖

for i in range(50):
    t = threading.Thread(target=run, args=('
%s' % i,)) t.start() print(threading.active_count()) while threading.active_count() != 1: pass else: print('is done')