暂停代码如下:
$this->synchronized(function($thread){
if (!$thread->done)
$thread->wait();
}, $this);
唤醒代码如下:
$my->synchronized(function($thread){
$thread->done = true;
$thread->notify();
}, $my);
那么......那个thread->done到底是个什么玩意?为什么我去掉了程序依然跑得通?恳请各位大佬指点迷津。
1 回答
蓝山帝景
TA贡献1843条经验 获得超7个赞
这里的done
就是个普通的字段,和下面的用法其实是一样的,都是PHP的基本用法:
class A {
}
$a = new A();
$a->done = true;
你的完整代码应该pthread里的实例吧:
<?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());
start()
的时候开始在子线程里跑run()
,这是done
还没赋值,所以会执行wait()
。而主线程接着会执行notofy()
唤醒正在wait()
的子线程。
另一种情况是主线程先对done
赋值和执行notify()
,然后再到子线程执行run()
,这时子线程就不用wait
了,因为主线程已经notify()
了。
- 1 回答
- 0 关注
- 517 浏览
添加回答
举报
0/150
提交
取消