<?php class Sync extends Thread { private $name = ''; public function __construct($name) { $this->name = $name; } public function run() { //让线程进入等待状态 $this->synchronized(function($self){ $self->wait(); }, $this); echo "thread {$this->name} run... \r\n"; } } //我们创建10个线程 $threads = array(); for($ix = 0; $ix < 10; ++$ix) { $thread = new Sync($ix); $thread->start(); $threads[] = $thread; } $num = 1; while(true) { if($num > 5) { //当$num大于5时,我们才唤醒线程让它们执行 foreach($threads as $thread) { $thread->synchronized(function($self){ $self->notify(); }, $thread); } break; } //这里我们处理我们需要的代码 //这时候线程是处在等待状态的 echo "wait... \r\n"; sleep(3); ++$num; } foreach($threads as $thread) { $thread->join(); } echo "end... \r\n";
php Pthread 多线程 (五) 线程同步
转载有些时候我们不希望线程调用start()后就立刻执行,在处理完我们的业务逻辑后在需要的时候让线程执行。
10个线程在start后并没有立刻执行,而是等待中,直到通过notify()发送唤醒通知,线程才执行。
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
深入浅出Java多线程(五):线程间通信
大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第五篇内容:线程间通信。大家觉得有用请点赞,喜欢请关注!秀才在此谢过大家了!!!
Java Java多线程 线程 多线程 线程通信 -
Linux 多线程 pthread
<br />1. Linux线程的发展<br />早在LINUX2.2内核中。并不存在真正意义上的线程,当时Linux中常用的线程pthread实际上是通过进程来模拟的
linux 多线程 thread join library -
多线程计算----pthread
#include #include #include #include #include #define NUM_THREADS 10 #define buffer_size 6000000void *thread_function(void *agr);int buffer[buffer_size];int result[NUM_THREADS];int result1[NUM_THREADS];int main() { int res; pthread_t a_thread[NUM_THREADS]; void *thread_result; int lots_of_threads; //
#include i++ #define 前端 数据 数据库 编程语言