这两种情况有什么区别?我无法理解使用哪个。看起来他们基本上做同样的事情。
pthread_lock(&mutex)
critical section
pthread_unlock(&mutex)
VS
sem_wait(&mutex)
section
sem_post(&mutex)
答案 0 :(得分:2)
忘记提及的其他答案是信号量没有“所有者”。互斥锁通常拥有锁的所有者,因此只有锁定它的线程才能解锁它。信号量只是柜台。
答案 1 :(得分:1)
Mutex一次只允许一个线程访问关键部分。
信号量允许更多异域并发。例如,解决读者和作家问题 - 请参阅http://en.wikipedia.org/wiki/Readers%E2%80%93writers_problem
答案 2 :(得分:1)
互斥锁通常是二进制的,而信号量可以初始化为大于1的值。实际上,这意味着多个线程可以同时锁定信号量,而使用互斥锁是不可能的。希望有所帮助!
答案 3 :(得分:0)
有时,互斥锁提供优先级升级以防止优先级倒置和信号量不变。在我的RTOS中,这是我选择其中一个的主要原因。