Advertisement

比较信号量和互斥锁的异同

阅读量:

信号量与互斥锁

  • 信号量(semaphore[ˈseməfɔ:®])主要用于实现多线程与多任务间的同步机制,当一个线程完成特定操作后,会通过信号量向其他线程发送通知,从而触发后续操作的执行。
    • 互斥锁(Mutual exclusion,缩写 Mutex)则用于实现多线程与多任务之间的互斥访问机制。当某一特定线程占用某个资源时,其他线程将无法访问该资源,直至该线程释放锁为止。例如,在对全局变量进行访问时,通常需要加锁以确保操作的完整性,并在操作完成后进行解锁。

虽然这两个概念在功能上存在一定的相似性,但它们的核心关注点存在明显差异:

  • 信号量并不局限于对某一具体资源的锁定,而是更侧重于流程控制的概念。例如:假设有A、B两个线程,B线程需要等待A线程完成某项任务之后才能继续执行后续步骤。这种任务并不一定涉及对资源的锁定,可能仅是执行计算或数据处理等操作。
  • 而互斥锁则强调“锁定某一资源”的特性,在锁定期间内,其他所有线程均无法对该受保护的数据进行任何操作。

由此可见,互斥锁实际上是信号量的一种特殊情形(即n=1的情况)。这意味着理论上可以使用信号量来替代互斥锁。然而由于互斥锁结构简单且运行效率较高,在必须确保资源独占性的场景下,仍然倾向于采用这种设计方式

信号量可以被抽象为五个基本的操作:

  1. 创建 Cre

全部评论 (0)

还没有任何评论哟~