天天看點

php 定時任務 檔案鎖_PHP檔案鎖并發操作詳解

本文主要和大家分享PHP檔案鎖并發操作詳解,預設的:PHP的檔案操作函數,不是阻塞狀态,而是自由操作狀态,希望能幫助到大家。

條件:當需要一個腳本操作而需要阻塞另外的腳本操作時,需要用到檔案鎖。

鎖操作流程:先加鎖,檢測鎖是否加成功,如果成功再使用!

鎖定類型:讀鎖: s-Lock(share-lock)共享鎖,讀操作前,期望增加的鎖定。導緻,允許并發讀,阻塞額外的寫操作。

寫鎖: x-lock(exclusive-lock)排他鎖,獨占鎖,寫操作前,嘗試添加的鎖定類型。導緻,其他腳本不能讀也不能寫。

意向鎖:所有的操作資源的腳本都遵循一個約定來使用檔案鎖(約定)。阻塞:指的是上一個操作執行完解鎖之後,下一個對檔案鎖定的操作才能繼續執行

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

類型參數($operation):LOCK_SH 讀鎖 和 LOCK_EX 寫鎖

例:

使用讀鎖:

php 定時任務 檔案鎖_PHP檔案鎖并發操作詳解

使用寫鎖:

php 定時任務 檔案鎖_PHP檔案鎖并發操作詳解

可以通過LOCK_NB來在鎖定失敗時,不阻塞:<?php

$fp = fopen('/tmp/lock.txt', 'r+');

if(!flock($fp, LOCK_EX | LOCK_NB)) {

echo 'Unable to obtain lock';

exit(-1);

}

fclose($fp);

解鎖:在 PHP 5.3.2版本之前,鎖也會被 fclose() 釋放(在腳本結束後會自動調用),現在隻能通過flock($fp,LOCK_UN) 手動解鎖預設的:PHP的檔案操作函數,不是阻塞狀态,而是自由操作狀态。

條件:當需要一個腳本操作而需要阻塞另外的腳本操作時,需要用到檔案鎖。

鎖操作流程:先加鎖,檢測鎖是否加成功,如果成功再使用!

鎖定類型:讀鎖: s-Lock(share-lock)共享鎖,讀操作前,期望增加的鎖定。導緻,允許并發讀,阻塞額外的寫操作。

寫鎖: x-lock(exclusive-lock)排他鎖,獨占鎖,寫操作前,嘗試添加的鎖定類型。導緻,其他腳本不能讀也不能寫。

意向鎖:所有的操作資源的腳本都遵循一個約定來使用檔案鎖(約定)。阻塞:指的是上一個操作執行完解鎖之後,下一個對檔案鎖定的操作才能繼續執行

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

類型參數($operation):LOCK_SH 讀鎖 和 LOCK_EX 寫鎖

例:

使用讀鎖:

php 定時任務 檔案鎖_PHP檔案鎖并發操作詳解

使用寫鎖:

php 定時任務 檔案鎖_PHP檔案鎖并發操作詳解

可以通過LOCK_NB來在鎖定失敗時,不阻塞:<?php

$fp = fopen('/tmp/lock.txt', 'r+');

if(!flock($fp, LOCK_EX | LOCK_NB)) {

echo 'Unable to obtain lock';

exit(-1);

}

fclose($fp);

解鎖:在 PHP 5.3.2版本之前,鎖也會被 fclose() 釋放(在腳本結束後會自動調用),現在隻能通過flock($fp,LOCK_UN) 手動解鎖。

相關推薦:

PHP如何使用檔案鎖解決高并發問題

php利用檔案鎖來解決高并發問題

php高并發如何解決