Threaded::synchronized() 允許您安全地設定或讀取同步條件,並根據這些條件採取行動(使用 ::wait() 和 ::notify()),因為您知道在特定時間只能執行一次對參考物件的 synchronized() 呼叫,來自不同執行緒環境的其他呼叫將會阻塞,直到 ::Synchronized() 閉包內呼叫 ::wait() 清除路徑為止。
(PECL pthreads >= 2.0.0)
Threaded::synchronized — 同步化
針對呼叫上下文,在保留參考物件的同步鎖定的同時執行程式碼區塊。
block
要執行的程式碼區塊
args
要用作區塊函式引數的可變長度引數清單
程式碼區塊的回傳值
範例 #1 同步化
<?php
class My extends Thread {
public function run() {
$this->synchronized(function($thread){
if (!$thread->done)
$thread->wait();
}, $this);
}
}
$my = new My();
$my->start();
$my->synchronized(function($thread){
$thread->done = true;
$thread->notify();
}, $my);
var_dump($my->join());
?>
上述範例會輸出
bool(true)
Threaded::synchronized() 允許您安全地設定或讀取同步條件,並根據這些條件採取行動(使用 ::wait() 和 ::notify()),因為您知道在特定時間只能執行一次對參考物件的 synchronized() 呼叫,來自不同執行緒環境的其他呼叫將會阻塞,直到 ::Synchronized() 閉包內呼叫 ::wait() 清除路徑為止。