PHP Conference Japan 2024

wincache_lock

(PECL wincache >= 1.1.0)

wincache_lock 取得指定鍵值的獨佔鎖

說明

wincache_lock(字串 $key, 布林值 $isglobal = false): 布林值

取得指定鍵值的獨佔鎖定。目前的腳本執行將會被阻擋,直到取得鎖定為止。一旦取得鎖定,其他嘗試使用相同鍵值請求鎖定的腳本將會被阻擋,直到目前的腳本使用 wincache_unlock() 釋放鎖定。

警告

在像 FastCGI 這樣的多程序環境中執行 PHP 腳本時,使用 wincache_lock()wincache_unlock() 可能會造成死鎖。除非您完全確定需要使用這些函式,否則請勿使用它們。對於大多數使用者快取的操作,並不需要使用這些函式。

參數

key

快取中要鎖定的鍵值名稱。

isglobal

控制鎖定的範圍是系統範圍還是區域範圍。區域鎖定的範圍在 IIS FastCGI 的情況下限定於應用程式集區,或者限定於所有具有相同父行程識別碼的 php 行程。

回傳值

成功時回傳 true,失敗時回傳 false

範例

範例 #1 使用 wincache_lock()

<?php
$fp
= fopen("/tmp/lock.txt", "r+");
if (
wincache_lock(“lock_txt_lock”)) { // 進行獨佔鎖定
ftruncate($fp, 0); // 清空檔案
fwrite($fp, "Write something here\n");
wincache_unlock(“lock_txt_lock”); // 釋放鎖定
} else {
echo
"無法取得鎖定!";
}
fclose($fp);
?>

參見

新增註釋

使用者提供的註釋 2 則註釋

1
PrisonDoom
5 年前
外部連結失效了,而且反斜線 "\" 大多數時候是用作「跳脫字元」。總之,謝謝。
-1
donraman at microsoft dot com
14 年前
使用者應注意,字元 '\' 不允許作為鎖定名稱的一部分。不允許使用反斜線的原因是因為我們使用 CreateMutex 呼叫,如 http://msdn.microsoft.com/en-us/library/ms682411(VS.85).aspx 中所述。根據這篇文章,第三個參數(鎖定名稱)不能包含 '\' 字元。

這表示以下程式碼將無法運作。

<?php

$ret_val
= wincache_lock("C:\WINDOWS\Temp/cache");
echo
$ret_val . '<br>';
$ret_val = wincache_unlock("C:\WINDOWS\Temp/cache");
echo
$ret_val . '<br>';

?>
To Top