Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php LOCK_NB在flock中是什么意思?_Php_Linux - Fatal编程技术网

Php LOCK_NB在flock中是什么意思?

Php LOCK_NB在flock中是什么意思?,php,linux,Php,Linux,PHPflock命令中的LOCK\u NB是什么意思?LOCK\u NB表示非阻塞 通常,当您尝试锁定文件时,PHP脚本执行将停止。对flock()的调用会阻止其恢复。它将一直执行此操作,直到被访问文件上的并发锁被删除 大多数情况下,您的进程是唯一一个试图锁定文件的进程,因此对flock的阻塞调用实际上会立即返回。只有当两个进程锁定同一个文件时,其中一个进程才会暂停 然而,LOCK\u NB标志在任何情况下都会使flock()立即返回。在该设置中,您必须检查返回的状态,以查看是否确实获得了锁。例

PHP
flock
命令中的
LOCK\u NB
是什么意思?

LOCK\u NB
表示非阻塞

通常,当您尝试锁定文件时,PHP脚本执行将停止。对
flock()
的调用会阻止其恢复。它将一直执行此操作,直到被访问文件上的并发锁被删除

大多数情况下,您的进程是唯一一个试图锁定文件的进程,因此对
flock
的阻塞调用实际上会立即返回。只有当两个进程锁定同一个文件时,其中一个进程才会暂停

然而,
LOCK\u NB
标志在任何情况下都会使
flock()
立即返回。在该设置中,您必须检查返回的状态,以查看是否确实获得了锁。例如:

while ( ! flock($f, LOCK_NB) ) {
    sleep(1);
}

将或多或少地模拟正常阻塞调用的行为。当然,这样做的目的是在文件仍被另一个进程锁定时执行其他/有意义的操作(而不仅仅是等待)。

意味着如果我在脚本1上对文件执行
LOCK_EX
,同时脚本2尝试读取文件或执行
LOCK_EX
脚本2将等待脚本1解锁文件。因此,当我将输出写入缓存时,但当我需要更新数据并重写缓存时,100个
LOCK_-EX
用户同时等待
LOCK_-SH
完成,而这100个
LOCK_-EX
写入时,更多
LOCK_-SH
用户正在等待我的服务器停止。LOCK_NB能解决吗?不,这不是一个解决方案。而且,如果您有那么多并发写请求,它听起来也不像缓存。根据,您不应该单独使用LOCK_NB,而是与其中一种锁类型结合使用——例如,来自该手册页面的示例:
if(!flock($fp,LOCK_EX | LOCK_NB)){echo'无法获得锁';exit(-1)}