即時通訊使用一個簡單的測試腳本從 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的,另一個 腳本阻塞,直到鎖被free'ed之後執行的腳本的一個,然後繼續釋放
後即時通訊並不真正在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?
有一個簡單的確定性順序,如隊列或不內核「只是」挑一的「更高級的規則」?
我看到 也許你有一個想法如何按特定順序同步進程? 如果沒有其他方式生病必須使用羊羣 – 2010-04-14 10:53:28
@John Doe:是的,使用SysV信號量。查看我的答案更新。 – caf 2010-04-14 11:33:33