python多執行緒中Lock 與RLock 鎖

2021-08-01 18:58:30 字數 2094 閱讀 9286

資源總是有限的,程式執行如果對同乙個物件進行操作,則有可能造成資源的爭用,甚至導致死鎖

也可能導致讀寫混亂

鎖提供如下方法:

1.lock.acquire([blocking])

2.lock.release()

3.threading.lock() 載入執行緒的鎖物件,是乙個基本的鎖物件,一次只能乙個鎖定,其餘鎖請求,需等待鎖釋放後才能獲取

例如:

無鎖:

#coding=utf8

import threading

import time

num = 0

defsum_num

(i):

global num

time.sleep(1)

num +=i

print num

print

'%s thread start!'%(time.ctime())

try:

for i in range(6):

t =threading.thread(target=sum_num,args=(i,))

t.start()

except keyboardinterrupt,e:

print

"you stop the threading"

print

'%s thread end!'%(time.ctime())

輸出:

sun

may 28 20:54

:59 2017 thread

start!

sunmay 28 20:54

:59 2017 thread

end!013

71015

結果顯示混亂

引入鎖:

#coding=utf8

import threading

import time

num = 0

defsum_num

(i):

lock.acquire()

global num

time.sleep(1)

num +=i

print num

lock.release()

print

'%s thread start!'%(time.ctime())

try:

lock=threading.lock()

list =

for i in range(6):

t =threading.thread(target=sum_num,args=(i,))

t.start()

for threadinglist in list:

threadinglist.join()

except keyboardinterrupt,e:

print

"you stop the threading"

print

'%s thread end!'%(time.ctime())

結果:

sun

may 28 21:15

:37 2017 thread

start!01

361015

sunmay 28 21:15

:43 2017 thread

end!

其中:

lock=threading.lock()載入鎖的方法也可以換成lock=threading.rlock()

如果將上面的sum_num修改為:

lock.acquire()

global num

lock.acquire()

time.sleep(1)

num +=i

lock.release()

print num

lock.release()

那麼:

lock=threading.lock() 載入的鎖,則一直處於等待中,鎖等待

而lock=threading.rlock() 執行正常

Python基礎 多執行緒與Lock鎖

python的執行緒是真正的posix thread,而不是模擬出來的執行緒。python的標準庫提供了兩個模組 thread低階模組和threading高階模組 重點 執行示例 由於任何程序預設就會啟動乙個執行緒,我們把該執行緒稱為主線程,主線程又可以啟動新的執行緒,python的threadin...

python 多執行緒 鎖Lock

在上次講gil鎖的時候 位址 有講到gil鎖也會有釋放的時候,就會導致資料的錯誤讀訪問,10萬次左右可能不會有影響,然而量級大上去,結果就不再是零了。那麼如何解決這種問題呢?這裡引入lock from threading import lock a 0 lock lock def add fun g...

多執行緒 Lock

reentrantlock和synchronized區別 作用跟synchronized 鎖一樣 reentrantlock 底層是 cas 值,期望,預期 synchronized 底層鎖公升級 reentrantlock 可以trylock 嘗試鎖 a.如果在某時間段內獲取到鎖,就執行 b.如果...