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

什么时候应该使用互斥体,什么时候应该使用信号量?

最佳答案

这是我记得什么时候使用什么 -

信号量: 当您(线程)想要 sleep 时使用信号量,直到其他线程告诉您醒来。信号量“向下”发生在一个线程(生产者)中,信号量“向上”(对于相同的信号量)发生在另一个线程(消费者)中 例如:在生产者-消费者问题中,生产者想要休眠直到至少一个缓冲槽为空——只有消费者线程才能知道缓冲槽何时为空。

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

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

https://stackoverflow.com/questions/4039899/

相关文章:

linux - 如何测量进程的单独 CPU 核心使用率?

python - 错误 "Microsoft Visual C++ 14.0 is required

c - 将简单的套接字变成 SSL 套接字

python - 将 Pandas 列转换为 DateTime

c - 错误 : Libtool library used but 'LIBTOOL' is und

python - NumPy 2d 数组的切片,或者如何从 nxn 数组 (n>m) 中提取 mxm

python - TransactionManagementError "You can' t 在使

python - Python 字典是哈希表的一个例子吗?

linux - 防止 strace 缩写参数?

linux - ssh:无法解析主机名 [主机名]:提供节点名或服务名,或未知