PHP flock檔案IO鎖的使用

2022-02-17 12:44:00 字數 1108 閱讀 8056

一、flock概述

bool flock  ( resource $handle  , int $operation  [, int &$wouldblock  ] )

引數handle

檔案的指標,由 fopen()  建立的 resource (資源);

operation

operation 可以是以下其中乙個值:

1. lock_sh  取得共享鎖,該鎖只能用於讀取檔案

2. lock_ex  取得排他鎖,該鎖可以讀寫檔案

3. lock_un  解除鎖定(無論是共享還是排他)

wouldblock

這是乙個引用型別,上鎖後如果其他程序訪問此資源會阻塞,此變數將會設為true,注意:windows不支援此功能;

二,鎖型別的差異

一切關於計算機對資源訪問的鎖定,都是基於程序而言的,程序給資源上鎖的行為,可以抽象的理解為程序試圖獲得對該資源的操作許可權,一旦獲取操作許可權,其他程序想要同時操作該資源時,必須等待該程序操作完成釋放操作許可權,其他程序才能對此資源進行操作,此概念可以防止資源爭用衝突導致的各種不可預知的行為;

一般而言,資源鎖只分為兩種,共享鎖和排他鎖,也通俗地被稱為讀鎖和寫鎖,再通過這兩種鎖型,衍生出各種概念性的鎖定場景,在這裡就不在討論範圍內了;

來看看兩種鎖定的概念;

共享鎖:當乙個程序給某個資源加上共享鎖,其他程序同一時間內,也可以把該資源加上自己的共享鎖,但是如果某程序需要向該程序加上排他鎖的時候就需要等待所有的共享鎖釋放之後的事了,這個其間程序被阻塞以等待所有共享鎖釋放;

排他鎖:當乙個程序給某個資源加上了排他鎖,其他程序需要再往這個資源新增鎖定的時候(無論共享鎖還是排他鎖),都需要等待此排他鎖釋放後,這個其間程序被阻塞已等待該排他鎖釋放;

三、特性

flock是一種協議型鎖定,它不是強制性的,也就是說,某種情況下,當乙個程序沒有按照約定在操作檔案之前呼叫flock獲取鎖,它依然可以在沒有獲取鎖的前提下操作檔案,無論是讀取或者是寫入,所以flock並不可靠

上面說的某種情況下,究竟是哪種情況? wouldblock 引數被檢測為0時,不過windows,並不支援這一檢測,所以為了安全起見,最好遵守約定,在所有操作檔案的前提時都相約先獲取鎖;

PHP flock 檔案鎖詳細介紹

flock php 4,php 5 flock 輕便的諮詢檔案鎖定 說明 bool flock int handle int operation int wouldblock php 支援以諮詢方式 也就是說所有訪問程式必須使用同一方式鎖定,否則它不會工作 鎖定全部檔案的一種輕便方法。note 在 ...

sql server行級鎖,排它鎖,共享鎖的使用

鎖的概述 一.為什麼要引入鎖 多個使用者同時對資料庫的併發操作時會帶來以下資料不一致的問題 丟失更新 a,b兩個使用者讀同一資料並進行修改,其中乙個使用者的修改結果破壞了另乙個修改的結果,比如訂票系統 髒讀 a使用者修改了資料,隨後b使用者又讀出該資料,但a使用者因為某些原因取消了對資料的修改,資料...

標準I O檔案I O的區別

標準i o檔案i o的區別 標準 標準i o是ansi c建立的乙個標準i o模型,是乙個標準函式包和stdio.h標頭檔案中的定義,具有一定的可移植性。標準io庫處理很多細節。例如快取分配,以優化長度執行io等。標準的io提供了三種型別的快取。1 全快取 當填滿標準io快取後才進行實際的io操作。...