六、其他的线程同步函数

1、异步设备I/O

异步设备I/O使得线程能够启动一个读操作或写操作,但是不必等待读操作或写操作完成。设备对象是可以同步的内核对象,可以调用WaitForSingleObject函数传递文件、套接字和通信端口的句柄。当系统执行异步I/O时,设备对象处于未通知状态。一旦操作完成,系统就将对象的状态改为已通知状态,该线程就知道操作已经完成。线程就可以继续运行。

2、DWORD WaitForInputIdle(HANDLE hProcess, DWORD dwMilliseconds)

使线程一直等待,直到hProcess标识的进程在创建应用程序的第一个窗口的线程中已经没有尚未处理的输入为止。用于父进程创建子进程,父进程的线程想要知道子进程何时完成初始化,唯一的办法是等待,直到子进程不再处理任何输入为止。

3、MsgWaitForMultipleObjects

DWORD MsgWaitForMultipleObjects(DWORD dwCount, PHANDLE phObjects,BOOL fWaitAll,

DWORD dwMilliseconds, DWORD dwWakeMask);

DWORD MsgWaitForMultipleObjectsEx(DWORD dwCount, PHANDLE phObjects,

DWORD dwMilliseconds, DWORD dwWakeMask, DWORD dwFlags);

主要区别在于前者允许线程在内核对象变成已通知状态或窗口消息需要调度到调用线程创建的窗口中时被调度。创建窗口和执行与用户界面相关的任务的线程应调MsgWaitForMultipleObjectsEx函数,而不该调用MsgWaitForMultipleObjects函数,因为后面这个函数将使线程的用户界面无法对用户作出响应。

  1. WaitForDebugEvent:

Wi n d o w s将调试支持特性内置于操作系统之中。当调试程序启动运行时,它将自己附加给一个被调试程序。该调试程序只需闲置着,等待操作系统将与被调试程序相关的调试事件通知它。调试程序通过调用WaitForDebugEvent函数来等待这些事件的发生:

BOOL WaitForDebugEvent(PDEBUG_EVENT pde,DWORD dwMilliseconds);

当调试程序调用该函数时,调试程序的线程终止运行,系统将调试事件已经发生的情况通知调试程序,方法是允许调用的WaitForDebugEvent函数返回。p d e参数指向的结构在唤醒调试程序的线程之前由系统填入信息。该结构包含了关于刚刚发生的调试事件的信息。

  1. SingleObjectAndWait:

用于在单个原子方式的操作中发出关于内核对象的通知并等待另一个内核对象。

DWORD SingleObjectAndWait( HANDLE hObjectToSignal, HANDLE hObjectToWaitOn,

DWORD dwMilliseconds, BOOL fAlertable);

hObjectToSignal参数必须标识一个互斥对象、信标对象或事件。hObjectToWaitOn参数用于标识下列任何一个内核对象:互斥对象、信标、事件、定时器、进程、线程、作业、控制台输入和修改通知。dwMilliseconds参数指明该函数为了等待该对象变为已通知状态,应该等待多长时间,而fAlertable标志则指明线程等待时该线程是否应该能够处理任何已经排队的异步过程调用。

第九章 线程与内核对象的同步(6)相关推荐

  1. Windows核心编程 第九章 线程与内核对象的同步(上)

    第9章 线程与内核对象的同步 上一章介绍了如何使用允许线程保留在用户方式中的机制来实现线程同步的方法.用户方式同步的优点是它的同步速度非常快.如果强调线程的运行速度,那么首先应该确定用户方式的线程同步 ...

  2. Windows核心编程 第九章 线程与内核对象的同步(下)

    9.4 等待定时器内核对象 等待定时器是在某个时间或按规定的间隔时间发出自己的信号通知的内核对象.它们通常用来在某个时间执行某个操作. 若要创建等待定时器,只需要调用C r e a t e Wa i ...

  3. 第九章 线程与内核对象的同步(4)

    四.信标内核对象 信标内核对象用于资源进行计数.包含:引用计数.最大资源数量(用于标识信标能够控制的资源的最大数量).当期资源数量(用于标识当前可以使用的资源的数量). 信标的使用规则:当前资源数量大 ...

  4. 线程与内核对象的同步——Windows核心编程学习手札之九

    线程与内核对象的同步 --Windows核心编程学习手札之九 用户方式下的线程同步机制具有速度快的特点,但有其局限性,对于许多应用程序来说,并不合适.例如,互锁函数家族只能在单值上运行,根本无法使线程 ...

  5. 线程与内核对象的同步-2

    等待定时器内核事件 CreateWaitableTimer( PSECURITY_ATTRIBUTES psa, BOOL fManualReset, PCTSTR pszName); 进程可以获得它 ...

  6. 第九章 - 线程安全集合类

    第九章 - 线程安全集合类 线程安全集合类概述 线程安全集合类可以分为三大类: 遗留的线程安全集合如 Hashtable.Vector.线程安全的实现无非直接加synchronized 使用 Coll ...

  7. Linux多线程服务端编程笔记,陈硕Linux多线程服务端编程读书笔记 —— 第一章 线程安全的对象生命周期管理...

    muduo书第一章的思维导图(新窗口打开可以看大图) 线程安全的对象析构和回调(使用shared_ptr和weak_ptr) 注释是英文的(工地英语-) StockFactory.h // in mu ...

  8. Windows PE第九章 线程局部存储

    线程局部存储(TLS) 这个东西并不陌生了,之前写过了一个关于这个的应用,利用静态TLS姿势实现代码段静态加密免杀或者所谓的加壳思路.地址在这:http://blog.csdn.net/u013761 ...

  9. java2第九章的总结_java并发的艺术-读书笔记-第九章线程池

    使用线程池的好处: 1.降低资源消耗:减少了线程创建和销毁的资源消耗 2.提高响应速度,当任务到达时,线程可以不尽兴创建直接处理 3.提高线程的可管理性.使用线程池可以对线程进行统一的管理,监控,使用 ...

最新文章

  1. 不止JDK7的HashMap,JDK8的ConcurrentHashMap也会造成CPU 100%
  2. Docker知识1:Docker-hub简介
  3. 有简易通用权限管理后台的快速C# ASP.NET开发的例子应用程序卖给了曾长期开发JAVA银行程序的大哥...
  4. DFS应用——遍历无向图
  5. php 显示ip所属地 (qq版)
  6. Cloudera CDH 5.1版本的Hive与LDAP-2.4.44集成
  7. 2016集训测试赛(二十四)Problem C: 棋盘控制
  8. 蛮力法 字符串匹配
  9. Spring自动扫描
  10. emule学习与分析一 概述
  11. 开发板添加上 Web 界面+openwrt luci界面修改
  12. 图解深度学习-梯度下降学习率可视化
  13. iMeta教你绘图 | 世界海拔地图
  14. DOTween和iTween比较
  15. vue2 确认框 MessageBox 弹框 删除确认取消
  16. binlog2sql 用法
  17. python自动翻译excel某一列_python批量将excel内容进行翻译写入功能
  18. 滤波算法 | 无迹卡尔曼滤波(UKF)算法及其MATLAB实现
  19. 【Linux-操作系统】
  20. linux igmp 属于那层协议,igmp协议属于哪一层

热门文章

  1. Linux IPC udp/tcp/UNIX域 socket编程
  2. Linux--Ubuntu12.04安装NDK
  3. 动态子类化CComboBox以得到子控件EDIT及LISTBOX
  4. 使用.NET,郁闷之余,写下的废话
  5. SQL Server 查询基础
  6. 汇编语言 实现一个数字的平方
  7. 以未来的计算机为题写一篇作文,请以“未来的交通工具”为题写一篇英语作文...
  8. js 中 setInterval 的返回值问题
  9. Google Protocol Buffers和java字符串处理控制
  10. 网络程序开发实验报告