进程或线程中同步互斥手段
关键代码段
仅在进程内使用,用户态,速度快于内核对象。
事件对象
特点:有激发状态(signaled)和未激发。可以分为手动和自动两种状态。可以跨进程使用。手动就是开发者必须显示的调用ResetEvent去将事件设置为无信号状态,那么如果一个有信号的事件对象,多个线程在等待的话,其实都可以继续执行;自动模式就是如果事件有信号,并且第一个等待线程获取了该信号,就会自动的设置为无信号,那么其他线程就会阻塞住,处于等待状态。
CreateEvent : 创建或者打开事件对象,并返回句柄。如果存在,那么直接返回已有的句柄。
SetEvent : 设置为有信号
ResetEvent : 设置为无信号。一般都是手动模式使用的。自动事件对象是无需自己去维护这个状态的,wait函数会自动设置。
PulseEvent : 先设置为有信号,然后再设置为无信号。这是为了兼容而保留的,不建议使用。因为不确定会让多少线程继续执行。
OpenEvent : 获取一个有名字的事件对象句柄。
参考 : https://docs.microsoft.com/en-us/windows/win32/sync/using-event-objects
互斥量Mutex
特点:可以跨进程使用。仅一个线程拥有互斥量的访问权。signal状