在PHP中,線程的條件變量可以通過使用Threaded
類的wait()
和notify()
方法來實現。下面是一個簡單的示例:
<?php
class MyThread extends Thread {
private $mutex;
private $cond;
public function __construct(Threaded $mutex, Threaded $cond) {
$this->mutex = $mutex;
$this->cond = $cond;
}
public function run() {
$this->mutex->synchronized(function($mutex) {
$this->cond->wait($mutex);
echo "Thread is notified.\n";
}, $this->mutex);
}
public function notify() {
$this->mutex->synchronized(function($mutex) {
$this->cond->notify();
}, $this->mutex);
}
}
$mutex = new Threaded();
$cond = new Threaded();
$thread = new MyThread($mutex, $cond);
$thread->start();
// 主線程等待1秒后通知子線程
sleep(1);
$thread->notify();
$thread->join();
?>
在這個示例中,我們創建了一個MyThread
類,它接受一個Threaded
類型的互斥鎖mutex
和條件變量cond
作為參數。在run()
方法中,子線程首先對互斥鎖進行加鎖,然后調用條件變量的wait()
方法等待通知。在主線程中,我們等待1秒后調用notify()
方法通知子線程。子線程收到通知后輸出一條消息。