執行緒鎖:目的是將一段**鎖住,一旦獲得鎖許可權,除非釋放執行緒鎖,否則其他**都無法獲得鎖許可權。
為什麼需要執行緒鎖?
多執行緒同時完成特定的操作時,由於並不是原子操作,所以在完成操作的過程中會被打斷去做其他的工作,可能會產生髒資料
例如:乙個執行緒讀取變數n(初始值為0)然後n++,最後輸出n。
當執行完n++後被打斷,由另外的執行緒做同樣的工作,這是n被加了兩次,所以n最後等於2而不是1
使用lock函式建立執行緒鎖,使用lock.acquire方法加鎖,使用lock.release方法解鎖。在加鎖後任何**執行acquire方法都會被阻塞,知道該鎖被釋放。
話不多說,上**
執行的時候可以將加鎖和解鎖**注釋掉執行下試試
from atexit import register
from threading import thread, lock, currentthread
from time import sleep, ctime
import random
lock = lock(
)print
(type
(lock)
)def
fun():
lock.acquire(
)# 加鎖
for i in
range(5
):print
('thread name'
,'='
, currentthread(
).name,
'i',
'=', i)
sleep(random.randint(1,
5)) lock.release(
)#解鎖
defmain()
:for i in
range(3
):thread(target = fun)
.start(
)@register
defexit()
:print
('執行緒執行完畢:'
,ctime())
main(
)
什麼是共享鎖 什麼是排他鎖
什麼是共享鎖?什麼是排他鎖?共享鎖 如果事務t對資料a加上共享鎖後,則其他事務只能對a再加共享鎖,不能加排他鎖。獲准共享鎖的事務只能讀資料,不能修改資料。排他鎖 如果事務t對資料a加上排他鎖後,則其他事務不能再對a加任任何型別的封鎖。獲准排他鎖的事務既能讀資料,又能修改資料。簡要說明為什麼會發生死鎖...
什麼是事務?什麼是鎖?
a.事務就是被繫結在一起作為乙個邏輯工作單元的sql語句分組,如果任何乙個語句操作失敗那麼整個操作就被失敗,以後操作就會回滾到操作前狀態,或者是上有個節點。b.為了確保要麼執行,要麼不執行,就可以使用事務。要將有組語句作為事務考慮,就需要通過acid測試,即原子性,一致性,隔離性和永續性。c.鎖 在...
什麼是事務?什麼是鎖?
a.事務就是被繫結在一起作為乙個邏輯工作單元的sql語句分組,如果任何乙個語句操作失敗那麼整個操作就被失敗,以後操作就會回滾到操作前狀態,或者是上有個節點。b.為了確保要麼執行,要麼不執行,就可以使用事務。要將有組語句作為事務考慮,就需要通過acid測試,即原子性,一致性,隔離性和永續性。c.鎖 在...