什么时候应该使用互斥体,什么时候应该使用信号量?
最佳答案
这是我记得什么时候使用什么 -
信号量: 当您(线程)想要 sleep 时使用信号量,直到其他线程告诉您醒来。信号量“向下”发生在一个线程(生产者)中,信号量“向上”(对于相同的信号量)发生在另一个线程(消费者)中 例如:在生产者-消费者问题中,生产者想要休眠直到至少一个缓冲槽为空——只有消费者线程才能知道缓冲槽何时为空。
互斥: 当您(线程)想要执行不应由任何其他线程同时执行的代码时,请使用互斥锁。 Mutex 'down' 发生在一个线程中,mutex 'up' 必须 稍后发生在同一个线程中。 例如:如果您要从全局链表中删除一个节点,您不希望另一个线程在您删除该节点时使用指针。当你获取一个互斥体并忙于删除一个节点时,如果另一个线程试图获取相同的互斥体,它将进入休眠状态,直到你释放互斥体。
自旋锁: 当您真的想使用互斥锁但不允许您的线程休眠时,请使用自旋锁。 例如:操作系统内核中的中断处理程序绝不能休眠。如果是这样,系统将卡住/崩溃。如果需要从中断处理程序中插入一个节点到全局共享链表,获取一个自旋锁-插入节点-释放自旋锁。
https://stackoverflow.com/questions/4039899/