PHP 中的共享鎖和排它鎖

2021-09-28 17:20:50 字數 976 閱讀 3272

共享鎖和排他鎖主要是為了解決併發導致的問題。

在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做任何修改。排它鎖 寫鎖 排...