0
考虑以下用途:使用二进制信号量作为互斥量 - 它是否是免费的?
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的计数Semaphore
在创建时可以配置为“公平”或不是。在这里,'公平'是指等待线程将放入FIFO中,以便等待最长的线程首先被执行。
看起来像你粘贴的伪代码。什么样的'信号量'是'锁定'?什么是“下”和“上”? – ArjunShankar
@ArjunShankar:我可以想象,'down'和'up'是与信号量相关的标准操作。 –
无论如何,假设'down(lock)'是一种获得独占访问的方式,它真的取决于'down(lock)'是否公平。即如果有多个线程在等待它,那么决定哪个线程胜出的逻辑是什么。 – ArjunShankar