使用二进制信号量作为互斥体 - 它是免费的吗?

时间:2012-05-21 11:25:01

标签: synchronization mutex semaphore

请考虑以下用法:

Shared data: semaphore lock; // initially lock = 1
...
down(lock);
CRITICAL SECTION
up(lock);

此代码是否满足饥饿自由(即如果进程等待进入CS,最终会成功)?

1 个答案:

答案 0 :(得分:1)

这实际上取决于多个线程在down(lock)等待时选择线程时使用的策略。

e.g。

  1. 如果此政策以队列为基础,则保证您无饥饿。
  2. 如果任意选择多个等待线程中的一个,那么你可以通过纯粹的运气来挨饿。
  3. 如果它基于优先级,那么只要高优先级线程继续请求锁定,低优先级线程就会饿死。
  4. 例如,Java的Semaphore计数在创建时可以配置为“公平”。或不。在这里,'公平'指的是等待线程将被放入FIFO中,以便首先执行等待时间最长的线程。