共享鎖和排他鎖主要是為了解決併發導致的問題。
在php中,共享鎖和排它鎖主要用在兩個地方,乙個是資料庫,乙個是檔案。
php對資料庫使用鎖依靠sql語句
select 預設不加鎖
select... lock in share mode 加共享鎖
select ... for update 加排它鎖
update delete insert 預設加排它鎖
msql中共享鎖和排它鎖的區別
假設有事務a,事務b,資料c
如果事務a
對資料c加上共享鎖後,沒獲取到資料c共享鎖的其他事務(比如事務b)只能對資料c
再加共享鎖,不能加排他鎖(帶排他鎖的語句不能執行)。
獲准共享鎖的事務只能讀資料,不能修改資料,比如事務a和事務b都獲取到資料c的共享鎖,則他們都可以讀資料c,但不可以修改資料c,但如果事務a在獲取到資料c共享鎖的前提下再對資料c加排它鎖,則事務a可以對資料c進行讀取和修改。
如果事務a
對資料c
加上排他鎖後,則其他事務(比如事務b)不能再對資料c
加任何型別的鎖(帶共享鎖和排他鎖的語句都不能執行)。獲准排他鎖的事務(比如事務a)既能讀資料,又能修改資料。
php對檔案使用鎖依靠 flock() 函式
flock() 函式鎖定或釋放檔案。
若成功,則返回 true。若失敗,則返回 false。
flock(file,lock,block)
引數
描述file
必需。規定要鎖定或釋放的已開啟的檔案。
lock
必需。規定要使用哪種鎖定型別。
block
可選。若設定為 1 或 true,則當進行鎖定時阻擋其他程序。
flock() 操作的 file 必須是乙個已經開啟的檔案指標。
lock 引數可以是以下值之一:
共享鎖和排它鎖
首先了解的是共享鎖和排它鎖都屬於悲觀鎖。是悲觀鎖的不同實現。共享鎖 讀鎖,是讀取操作建立的鎖,其他使用者可以併發的讀取資料,但任何事務都不能對資料進行修改,知道釋放了共享鎖。如果事務t對資料a加上共享鎖以後,其他事務只能對資料a加共享鎖,不能加排它鎖,獲取共享鎖的事務只能讀取資料,不能修改資料。排它...
共享鎖和排它鎖
共享鎖 s鎖 如果事務t對資料a加上共享鎖後,則其他事務只能對a再加共享鎖,不能加排他鎖。獲准共享鎖的事務職能讀取資料,不能修改資料。排他鎖 x鎖 如果事務t對資料a加上排他鎖後,則其他事務不能在對a加任何型別的封鎖。獲准排他鎖的事務既能讀取資料,也能修改資料。資料庫死鎖的原因 若干事務相互等待對方...
讀寫鎖,共享鎖,排它鎖
共享鎖 讀鎖 共享鎖就是允許多個執行緒同時獲取乙個鎖,乙個鎖可以同時被多個執行緒擁有。若事務t對資料物件a加上共享鎖,則事務t可以讀a但不能修改a,其他事務只能再對a加共享鎖,而不能加排它鎖,直到t釋放a上的共享鎖。這保證了其他事務可以讀a,但在t釋放a上的鎖之前不能對a做任何修改。排它鎖 寫鎖 排...