信号量、互斥量和临界区访问范围上的差别
信号量、互斥量和临界区都是用来支持线程同步的工具,它们的作用大体上类似,这里简要描述一下它们在访问范围上的差别。
信号量在整个系统中可以被任意进程的任意线程获取并释放。也就是说,它是可以被跨进程访问的,而且被线程A获取的信号量可以由线程B来释放。也就是说任何进程的线程都可以强行获取一个信号量(获取之前先释放)。
互斥量也是可以在整个系统中被任意进程的任意线程访问到,但它严格限定只有获取了互斥量的线程才能释放该互斥量。也就是使用互斥量可以避免互斥状态被其他线程破坏。但它也存在一个问题,即任何进程的线程一旦获取到互斥量,就有权力一直不去释放它,导致其他进程的线程无法获取到互斥量。
临界区是比互斥量更加严格的同步手段。因为它的作用范围仅限于本进程,这样保证互斥效果不会被其他进程所影响。同一进程内的所有线程都可以占有(进入)和释放(离开)临界区。