wincache_lock

(PECL wincache >= 1.1.0)

wincache_lock 获取给定键的独占锁

描述

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

获取给定键的独占锁。当前脚本的执行将被阻塞,直到获得锁。一旦获得锁,其他尝试使用相同键请求锁的脚本将被阻塞,直到当前脚本使用 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
"Couldn't get the lock!";
}
fclose($fp);
?>

参见

添加备注

用户贡献的备注 2 条备注

PrisonDoom
5 年前
外部链接已失效,大多数情况下反斜杠 "\" 用于 "转义字符"。无论如何,感谢您的关注。
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