有些时候我们不希望线程调用start()后就立刻执行,在处理完我们的业务逻辑后在需要的时候让线程执行。

<?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";

10个线程在start后并没有立刻执行,而是等待中,直到通过notify()发送唤醒通知,线程才执行。

转载于:https://www.cnblogs.com/jkko123/p/6294593.html

php Pthread 多线程 (五) 线程同步相关推荐

  1. VC++ MFC 多线程及线程同步(详细、全面总结!)

    更多详情:http://blog.csdn.net/whyacinth/ VC++ MFC 多线程及线程同步 关键词: MFC    多线程及线程同步                          ...

  2. 3、Linux多线程,线程同步(转)

    3.Linux多线程,线程同步 5)线程私有数据 进程内的所有线程共享进程的数据空间,因此全局变量为所有线程所共有.但有时线程也需要保存自己的私有数据,这时可以创建线程私有数据(Thread-spec ...

  3. Java多线程之线程同步机制(锁,线程池等等)

    Java多线程之线程同步机制 一.概念 1.并发 2.起因 3.缺点 二.三大不安全案例 1.样例一(模拟买票场景) 2.样例二(模拟取钱场景) 3.样例三(模拟集合) 三.同步方法及同步块 1.同步 ...

  4. C#笔记20:多线程之线程同步中的信号量AutoResetEvent和ManualResetEvent

    C#笔记20:多线程之线程同步中的信号量AutoResetEvent和ManualResetEvent 本章概要: 1:终止状态和非终止状态 2:AutoResetEvent和ManualResetE ...

  5. cocos2dx多线程以及线程同步 与 cocos2dx内存管理与多线程问题

    cocos2d-x引擎在内部实现了一个庞大的主循环,每帧之间更新界面,如果耗时的操作放到了主线程中,游戏的界面就会卡,这是不能容忍的,游戏最基本的条件就是流畅性,这就是为什么游戏开发选择C++的原因. ...

  6. 【多线程】线程同步问题的三种解决方法

    目录 一.前言 二.同步代码块 三.同步方法 四.Lock方法 五.总结 一.前言 解决线程同步问题有三种方式:同步代码块.同步方法.锁(JDK5新增) 使用synchronized 解决线程同步问题 ...

  7. Java多线程之线程同步

    线程同步 线程同步:当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作,而其他线程又处于等待状态,实现线程同步的方法有很多. ...

  8. cocos2dx多线程以及线程同步 与 cocos2dx内存管理与多线程问题

    cocos2d-x引擎在内部实现了一个庞大的主循环,每帧之间更新界面,如果耗时的操作放到了主线程中,游戏的界面就会卡,这是不能容忍的,游戏最基本的条件就是流畅性,这就是为什么游戏开发选择C++的原因. ...

  9. MFC 多线程及线程同步

    一.MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程.二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环. 工作者线程没有消息机制,通常 ...

最新文章

  1. 5G URLLC — Overview
  2. Source Insight 常用设置和快捷键大全
  3. 【科普】不同行业的常见数据分析的指标是什么?
  4. ubuntu如何进入超级权限模式,退出超级权限模式,sudo su——root权限
  5. java 推送数据给js,Node.js实现数据推送
  6. http 路径 |_HTTP 请求與响应的格式及 curl 命令使用
  7. java8 lambda map排序_Android兼容Java 8语法特性的原理分析
  8. Android异常总结---1.Android java.net.SocketException: Address family not supported by protocol
  9. cocos2dx-lua 批量打包及修改
  10. [转]企业网站首页设计常见的6种布局方式
  11. [CF920G]List Of Integers
  12. 2020 泰迪杯 C 题
  13. 《Java核心技术 卷1》
  14. 【编程算法】跳跃游戏ⅠⅡⅢ(Python解法)
  15. Excel批量随机生成姓名
  16. iOS App 打包上架AppStore超详细流程
  17. 我的世界服务器总是显示错误,win 10 进mc服务器总是错误 怎么办
  18. 用HTML+CSS做一个简单好看的环保网页
  19. 科技云报道:FONE:半年融资过亿元,打造EPM领域“最强国货”
  20. python语音识别(语音转文字)

热门文章

  1. 使用Spring MVC 4构建Restful服务
  2. 查找只有一个字母不相同的单词
  3. plsql配置远程连接数据库
  4. Kvm虚拟机克隆以及添加磁盘
  5. webstorm常用快捷键
  6. php 正则表达式界限符
  7. 市场忽略了糖价的爆发力
  8. 关于NB-IoT,没有比这篇更通俗易懂的啦!
  9. 《Spark大数据分析:核心概念、技术及实践》大数据技术一览
  10. 用js获取当前地理位置的经纬度