互斥量和临界区的区别

通常有4种进程或线程同步互斥的控制方法,它们是:

  • 临界区
  • 互斥量
  • 信号量
  • 事件

其中临界区通过对多线程的串行化来访问公共资源或一段代码,速度快;互斥量为协调共同对一个共享资源的访问而设计的;信号量为控制一个具有有限数量用户资源而设计;事件则用来线程有一些事件已经发生,从而启动后继任务的开始。

今天我们主要对临界区和互斥量的异同点进行介绍,因为这两个实在太像了。

临界区

临界区用来保证在同一时刻只有一个线程可以访问到资源,对于临界区进行操作的函数有两个:

EnterCriticalSection();
LeaveCriticalSection();

临界区最大的特色是其同步速度很快,但是其只能用来同步本进程内的线程,而不可用来同步多个进程中的线程。

互斥量

互斥量和临界区很相似,只有拥有互斥对象的线程才具有访问资源的权限,互斥量比临界区负责,并且互斥量是可以命名的,因此互斥量不仅仅可以用于同一应用程序不同线程中资源的同步,也可以用于不同应用程序的线程之间实现对资源的同步。

因此互斥量可以在整个系统中被任意进程的任意线程访问到,但它严格限定只有获取了互斥量的线程才能释放该互斥量。

参考资料

  • 临界区,互斥量,信号量,事件的区别
  • 信号量、互斥量和临界区访问范围上的差别