猿问

php多线程pthread的$thread->done是啥玩意啊?

暂停代码如下:

$this->synchronized(function($thread){
    if (!$thread->done)
        $thread->wait();
}, $this);

唤醒代码如下:

$my->synchronized(function($thread){
    $thread->done = true;
    $thread->notify();
}, $my);

那么......那个thread->done到底是个什么玩意?为什么我去掉了程序依然跑得通?
恳请各位大佬指点迷津。

三国纷争
浏览 519回答 1
1回答

蓝山帝景

这里的done就是个普通的字段,和下面的用法其实是一样的,都是PHP的基本用法: class A { } $a = new A(); $a->done = true; Run 你的完整代码应该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()了。
随时随地看视频慕课网APP
我要回答