
Windows 同步技术
文章平均质量分 60
程序员王马
windows驱动工程师,从事windows 底层开发10年,开发过Serial、1394、stream、Image、Network、USB、GNSS、MBBCx、BlueTooch、Wifi、NCM等几乎所有类别的驱动程序开发项目。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Windows同步技术-事件对象(同步)
以下示例使用事件对象来防止在主线程写入该缓冲区时从共享内存缓冲区读取多个线程。首先,主线程使用 CreateEvent 函数创建初始状态为非签名的手动重置事件对象。主线程执行写入操作,然后在完成写入后将事件对象设置为信号状态。在开始读取操作之前,每个读取器线程都使用 WaitForSingleObject 等待手动重置事件对象发出信号。应用程序可以在许多情况下使用 事件对象 来通知等待线程发生事件。例如,文件、命名管道和通信设备上的重叠 I/O 操作使用事件对象来发出完成信号。原创 2025-04-26 00:15:00 · 346 阅读 · 0 评论 -
Windows同步技术-使用命名对象
唯一性:名称需全局唯一,避免与其他应用或系统对象冲突,建议使用 GUID 或应用专属前缀(如 MyApp_SharedData)。全局作用域:使用 Global\ 前缀(如 Global\MyMutex)可使对象跨会话访问(常用于服务进程与用户进程通信)。请注意,即使存在同名的现有对象,此函数也会成功。打开现有对象:使用 Open* 函数(如 OpenEvent)时,需确保对象已存在,否则返回 NULL。会话内作用域:默认情况下,命名对象仅在当前用户会话内可见(隐式前缀为 Local\)。原创 2025-04-26 00:15:00 · 579 阅读 · 0 评论 -
Windows同步技术-等待多个对象(二)
创建一个线程来等待 MAXIMUM_WAIT_OBJECTS 句柄,然后等待该线程和其他句柄。使用此技术可将句柄分解为 MAXIMUM_WAIT_OBJECTS组。原创 2025-04-25 02:42:13 · 206 阅读 · 0 评论 -
Windows同步技术-等待多个对象(一)
使用此技术可将句柄分解为 MAXIMUM_WAIT_OBJECTS组,这个方案中,两层结构可以保证快速响应的前提下等待 3696 个句柄,而它仅仅比调用WaitForMultipleObjects 多了几个内核切换的动作。线程池在句柄上高效等待,并在发出对象信号或超时间隔过期后分配工作线程,本质上它和第一个方案是一回事,只是使用了线程池进行调度罢了。不过这可能是一个平均估计,而最优情况可能更低。在最优情况下,如线程属于同一进程,数据在缓存中,无需TLB刷新,开销可能在 1000~3000个时钟周期。原创 2025-04-25 02:42:06 · 345 阅读 · 0 评论 -
Windows 同步技术-计时器队列和内存屏障
若要创建同步屏障,请调用 InitializeSynchronizationBarrier 函数,并指定线程在阻止之前应旋转的最大线程数以及线程的旋转次数。EnterSynchronizationBarrier 函数会阻止每个线程,直到屏障中阻塞的线程数达到屏障的最大线程计数,此时 EnterSynchronizationBarrier 取消阻止所有线程。此队列中的计时器(称为 计时器队列计时器)是轻量级对象,可用于指定要在指定到期时间到达时调用的回调函数。等待作由 线程池中的线程执行。原创 2025-04-24 00:15:00 · 599 阅读 · 0 评论 -
Windows 同步技术-一次性初始化
组件通常设计为在首次调用时执行初始化任务,而不是加载它们时。一次性初始化函数可确保此初始化仅发生一次,即使多个线程可能尝试初始化也是如此。Windows Server 2003 和 Windows XP: 应用程序必须使用 互锁函数 或其他同步机制提供自己的同步,以便进行一次性初始化。从 Windows Vista 和 Windows Server 2008 开始,可以使用一次性初始化函数。系统通过包含数据和状态信息的不透明 INIT_ONCE 结构来管理初始化过程。原创 2025-04-24 00:15:00 · 757 阅读 · 0 评论 -
Windows 同步-互锁变量访问
应用程序必须同步对多个线程共享的变量的访问。应用程序还必须确保对这些变量的作以原子方式执行(完全或根本不执行)。对正确对齐的 32 位变量的简单读取和写入是原子作。换句话说,你最终不会只更新变量的一部分;所有位都以原子方式更新。但是,不保证同步访问。如果两个线程正在读取和写入同一个变量,则无法确定一个线程是否会在另一个线程执行写入作之前执行其读取作。用于正确对齐的 64 位变量的简单读取和写入在 64 位 Windows 上是原子的。原创 2025-04-23 00:08:00 · 532 阅读 · 0 评论 -
Windows 同步-Windows 单向链表和互锁链表
【代码】Windows 同步-Windows 单向链表和互锁链表。原创 2025-04-23 00:07:30 · 387 阅读 · 0 评论 -
Windows 同步技术-关键节对象(Critical Section)详解
/ 调试信息(仅调试版本有效)// 锁计数器(反映竞争状态)// 递归计数(同一线程重入次数)// 当前持有锁的线程句柄// 内核信号量(用于线程等待)// 自旋次数(用户态等待优化)# 查看 CRITICAL_SECTION 内存布局CRITICAL_SECTION 包含以下字段:锁状态: 标识是否被占用(0 未锁定,1 锁定)。拥有者线程ID: 当前持有锁的线程标识。递归计数器: 支持同一线程多次获取锁(可重入性)。等待队列: 阻塞线程的队列(可能关联内核事件对象)。原创 2025-04-22 01:47:30 · 582 阅读 · 0 评论 -
Windows 同步技术-Wait 函数
Wait 函数允许线程阻止其自己的执行。在满足指定条件之前,等待函数不会返回。等待函数的类型确定所使用的条件集。原创 2025-04-22 01:34:41 · 562 阅读 · 0 评论