LOCK_NB在羊群中意味着什么?

Ron*_*ero 13 php linux

LOCK_NBPHP flock命令中的含义是什么?

mar*_*rio 27

LOCK_NB 意味着非阻塞.

通常当您尝试锁定文件时,您的PHP脚本执行将停止.要将呼叫flock()然后从恢复它.它会这样做,直到删除对访问文件的并发锁定.

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

LOCK_NB然而,国旗将在任何情况下flock()立即返回.在该设置中,您必须检查返回的状态以查看您是否确实获得了锁定.例如:

while ( ! flock($f, LOCK_NB) ) {
    sleep(1);
}
Run Code Online (Sandbox Code Playgroud)

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

  • 根据http://ca2.php.net/manual/en/function.flock.php,您不应该单独使用LOCK_NB,而是与其中一种锁类型结合使用 - 来自该手册的示例page:`if(!flock($ fp,LOCK_EX | LOCK_NB)){echo'无法获取锁'; 出口(-1); }` (3认同)
  • 意味着如果我在脚本1上的文件上执行`LOCK_EX`,同时脚本2尝试读取文件或执行`LOCK_EX`脚本2将等到脚本1解锁文件?. (2认同)
  • 就是这样. (2认同)