0

考虑以下用法:

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

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

4

1 回答 1

1

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

例如

  1. 如果此策略基于队列,则保证您不会挨饿。
  2. 如果任意选择多个等待线程之一,那么您可能会因运气不佳而饿死。
  3. 如果它基于优先级,那么只要高优先级线程继续请求锁,低优先级线程就会饿死。

例如,Java 的 countSemaphore在创建时可以配置为“公平”或不“公平”。这里,“公平”是指等待线程将被放入 FIFO 中,以便首先执行等待时间最长的线程。

于 2012-05-21T12:41:40.013 回答