您的位置:首页 > 其它

windows多线程同步机制

2011-12-23 11:01 169 查看
1:临界区
只能同步同一个进程的线程之间的同步,因为临界区不能跨越进程的边界工作。也是因为临界区没有name,所以不能跨进程使用。

访问临界区之前进行锁定,访问后进行解锁

如果线程B访问线程A锁定的临界区,那么线程B会被阻塞,直到线程A释放临界区,线程B才可以运行。在线程B进行阻塞期间,不占用CPU时间.

2:互斥量

可以同步在相同进程,或不同进程间的线程进行同步。所以互斥量是有name的,可以跨进程使用。

互斥量与临界区的区别,如果一个线程锁定了临界区,而终止时没有解除临界区的锁定,那么等待临界区空闲的其他线程将无限期的阻塞下去。然而,如果锁定互斥量的线程不能在其终止前解除互斥量的锁定,那么系统将认为互斥量被“放弃”了并自动释放该互斥量,这样等待进程就可以继续执行了。

3: 事件

在任何特定时间,事件只能处在两种状态的一种:引发(设置)或者调低(重置)。设置可以认为是出于信号状态,重置事件可以认为是出于非信号状态。

事件也被描述为“线程触发器”。事件也不能跨进程。同样它没有name。

事件有自动设置事件和手动设置事件。其差别是当自动设置事件上阻塞的线程被唤醒时,该事件被自动设置为信号状态。手动设置事件不能自动重置,它必须使用编程的方式重置。

如果事件只触发一个线程,那么使用自动设置事件和使用SetEvent唤醒等待线程。 这里不需要调用ResetEvent,因为线程被唤醒的那一刻事件将被自动重置。

如果事件将触发两个或者多个线程,那么使用手动设置线程和使用PulseEvent唤醒所以的等待线程。而且,您不需要调用ResetEvent,因为PluseEvent在唤醒所有等待线程后为你重置事件。

4:信号量

首先,信号量可以同步不同进程,相同进程中的线程。

其次,信号量跟其他3种同步机制不同的是,上面3种的同步机制的特性“要没有,要么没有”,信号量则不同,它始终代表可用资源的数量。锁定信号量会减少资源数,释放信号量则增加资源数。只有在资源数为0的时候,线程才会被阻塞。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: