Windows进程间通讯(IPC)----信号量
线程同步内核对象
操作系统进行进程间同步是利用信号量机制。对于windows系统而言,可以利用一些内核对象进行线程同步,因为这些内核对象可以命名并且属于系统内核,所以可以支持不同进程间的线程同步进而实现进程间同步。例如:事件对象,可等待的计时器对象,信号量对象,互斥量对象。
事件对象
事件对象分为手动重置事件对象和自动重置事件对象。手动重置事件对象是指在对象被触发后,WaitForSignalObject()函数返回后会立即将对象设置为未触发状态,所以这种只能实现一个等待线程被调度。而自动重置事件对象在对象被触发后,WaitForSignalObject()函数返回后其对象还是触发状态,除非手动设置,所以这样可以实现所有的等待线程都被调度。
可等待的计时器对象
等待的计时器对象也是分为手动重置和自动重置两种。
信号量对象
信号量对象和其他三种对象不同的是其有一个资源数,也就是可以设置一个资源数大于1的信号量对象,这样就可以让多个线程同时拥有此对象。
互斥量对象
互斥量对象是为了让过个线程中只有一个线程拥有此对象,多了一个递归计数,也就是一个线程可以多次调用wait函数,从而增加了递归计数值,只有当递归计数值等于0时此互斥量对象才会从新变成触发状态。