Windows 下同步(多线程协调)的实现 的简单解释

[ ]

The content is recoverd from Wordpress Blog, for more details please check HERE

September 5, 2015

VOID001 Comments 0 Comment

Windows下的多个线程之间的通信,是通过各种Object进行的, 目前我只了解到EventObject, 下面简单介绍一下什么是EventObject .

我们可以把各个线程想象成一些不同的流水线,比如制作面包的流水线, 一个线程(流水线)负责制作面包,另一个流水线负责将面包包装好,那么这两个流水线就存在逻辑上的顺序, 即使他们同时工作,包装的如果不等制作面包的制作好,是无法进行的. 在系统里也是这样 两个(或者多个)线程之间有依赖关系, 比如B要在A完成后才可以处理,C要等D E完成之后才能处理. 那么,多个线程之间如何协调好这个关系呢. 这时候Windows就使用EventObject来给各个线程发送信号,EventObject可以有名字也可以没有名字, 带名字的在多线程同步时很常用(这里说明一下 ,多个线程之间协调工作就叫同步), 在多线程同步处理事件的时候 , 首先建立好一系列的EventObject(和其他Object) ,然后 线程A执行开始的时候 将EventObjectA设置为FALSE(没被触发状态) 这时 线程B在等待EventObjectA的信号(就是保持挂起状态,一旦有信号激活就会开始执行) , 然后线程A执行完毕之后 , 就会将EventObjectA设置为TRUE (触发状态) 这时, 由于EventObjectA被触发, 线程B也就同时启动了,然后开始执行线程B,这样就实现了线程之间的同步

有关NtCreateEvent和 EventObject的说明 参见msdn文档

https://msdn.microsoft.com/en-us/library/windows/hardware/ff566423(v=vs.85).aspx NtCreateEvent 的介绍

https://msdn.microsoft.com/en-us/library/windows/desktop/ms682655(v=vs.85).aspx EventObject的介绍


Linux, Threads and Process, wine, 计算机系统原理 C. Linux, kernel, Laravel, PHP, Python, Shell, Web, wine


Historical Comments

Post navigation ————— NEXT
STATUS_OBJECT_TYPE_MISMATCH的可能原因
PREVIOUS mingw 和 MSYS 的区别

Back