考虑以下用法:
Shared data: semaphore lock; // initially lock = 1
...
down(lock);
CRITICAL SECTION
up(lock);
这段代码是否满足饥饿自由(即,如果一个进程等待进入 CS,它最终会成功)?
考虑以下用法:
Shared data: semaphore lock; // initially lock = 1
...
down(lock);
CRITICAL SECTION
up(lock);
这段代码是否满足饥饿自由(即,如果一个进程等待进入 CS,它最终会成功)?
这实际上取决于多个线程在等待时选择线程时使用的策略down(lock)
。
例如
例如,Java 的 countSemaphore
在创建时可以配置为“公平”或不“公平”。这里,“公平”是指等待线程将被放入 FIFO 中,以便首先执行等待时间最长的线程。