【发布时间】:2011-02-07 19:57:36
【问题描述】:
我使用了一个简单的测试脚本 http://www.tuxradar.com/practicalphp/8/11/0 像这样
<?php
$fp = fopen("foo.txt", "w");
if (flock($fp, LOCK_EX)) {
print "Got lock!\n";
sleep(10);
flock($fp, LOCK_UN);
}
我打开了 5 个 shell 并一个接一个地执行脚本 脚本会一直阻塞,直到锁被释放,然后在释放后继续
我对 php 的东西不是很感兴趣,但我的问题是: 有谁知道获得flock() 的顺序吗?
e.g.
t0: process 1 lock's
t1: process 2 try_lock < blocking
t2: process 3 try_lock < blocking
t3: process 1 releases lock
t4: ?? which process get's the lock?
是否有一个简单的确定性顺序,例如队列,或者内核是否“只是”通过“更高级的规则”选择一个?
【问题讨论】: