为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
三国纷争 2019-03-14 14:10:19
暂停代码如下: $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;

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()了。

查看完整回答
反对 回复 2019-03-18
  • 1 回答
  • 0 关注
  • 517 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信