我们什么时候应该使用互斥锁,什么时候应该使用信号量

新手上路,请多包涵

我们什么时候应该使用互斥锁,什么时候应该使用信号量?

原文由 Karthik Balaguru 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 414
1 个回答

以下是我记得什么时候使用什么 -

信号量: 当你(线程)想睡觉时使用信号量,直到其他线程告诉你醒来。信号量“向下”发生在一个线程(生产者)中,信号量“向上”(对于相同的信号量)发生在另一个线程(消费者)中,例如:在生产者-消费者问题中,生产者想要休眠直到至少一个缓冲区为空 - 仅消费者线程可以判断缓冲区插槽何时为空。

互斥锁: 当您(线程)想要执行不应由任何其他线程同时执行的代码时,请使用互斥锁。互斥锁“向下”发生在一个线程中,而互斥锁“向上” 必须 稍后发生在同一个线程中。例如:如果您要从全局链表中删除一个节点,您不希望另一个线程在您删除该节点时使用指针乱七八糟。当您获取一个互斥锁并忙于删除一个节点时,如果另一个线程试图获取相同的互斥锁,它将进入睡眠状态,直到您释放该互斥锁。

自旋锁 当您确实想使用互斥锁但不允许您的线程休眠时,请使用自旋锁。例如:操作系统内核中的中断处理程序绝不能休眠。如果是这样,系统将冻结/崩溃。如果需要从中断处理程序中插入一个节点到全局共享链表,获取一个自旋锁-插入节点-释放自旋锁。

原文由 Annu Gogatya 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题