PHP 8.4.0 RC4 available for testing

wincache_lock

(PECL wincache >= 1.1.0)

wincache_lock 指定したキーで排他ロックを確保する

説明

wincache_lock(string $key, bool $isglobal = false): bool

指定したキーについての排他ロックを確保します。 ロックを確保するまでは、現在のスクリプトの実行はブロックされます。 ロックを確保できたら、その後は他のスクリプトから同じキーのロックを要求があってもそれをブロックします。 現在のスクリプトが wincache_unlock() でロックを解放するまでは他のスクリプトからロックを確保できません。

警告

wincache_lock() および wincache_unlock() を使っていると、FastCGI のようなマルチプロセス環境において PHP スクリプトがデッドロックを引き起こすことがあります。 本当にそれが必要である場合でない限り、これらの関数は使わないようにしましょう。 キャッシュ上でのさまざまな操作の大半は、これらの関数を使う必要のないものです。

パラメータ

key

ロックを取得したいキャッシュ内のキーの名前。

isglobal

ロックのスコープをシステム全体にするかローカルにするかを制御します。 ローカルロックのスコープは、IIS FastCGI のアプリケーションプール内 あるいは同一の親プロセス ID を持つ 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
"Couldn't get the lock!";
}
fclose($fp);
?>

参考

add a note

User Contributed Notes 2 notes

up
1
PrisonDoom
5 years ago
The external link was off and the backslash "\" most of time are used for "scape character". Anyway, regards.
up
-1
donraman at microsoft dot com
14 years ago
User should be aware that character '\' is not allowed as part of lock name. The reason why backslash is not allowed is because we are using CreateMutex call as described at http://msdn.microsoft.com/en-us/library/ms682411(VS.85).aspx. As per this article third parameter cannot have '\' character which is the lock name.

This means below code will not work.

<?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