2

如果可能,请提供帮助。我打算从数据库中提取 X 数量的行,将它们分成 20 个数组的数组,然后将它们传递给一个线程进行同时处理。

为了确保进程同时工作,我创建了一个快速线程,该线程回显线程号,然后计数为 20。我希望看到像“1 at 1”然后“2 at 1”这样的结果。相反,在第二个线程开始执行之前,我看到第一个线程计数为 20。即“1 at 1”...“1 at 20”然后只有“2 at 1”。

<?php
class helloworld extends Thread {
    public function __construct($arg){
        $this->arg = $arg;
    }
    public function run(){
        if($this->arg){
            for ($i=1;$i<=20;$i++){
                echo $this->arg ." AT ";
                echo $i." ";
                sleep(1);
            }
        }
    }
}

?>

然后调用它我使用

for ($i=1;$i<=$num_threads;$i++){
    $thread[$i] = new helloworld($i);
    if($thread[$i]->start())
        $thread[$i]->join();
}

我所看到的正确吗?还是我在这里做一些愚蠢的事情?

谢谢

4

1 回答 1

3

pthread 的 join() 函数等待指定的线程终止。如果该线程已经终止,则 pthread 的 join() 函数立即返回。指定的线程必须是可连接的。

因此,您正在等待每个启动的线程终止,然后再继续循环。

于 2013-10-07T08:40:33.627 回答