如何定义忙等待解决方案的信号量
我如何定义一个具有繁忙等待解决方案的信号量?我得到了类似的东西
wait(Semaphore s){
s=s-1;
if (s<=0) {
// add process to queue
block();
}
}
signal(Semaphore s){
s=s+1;
if (s<0) {
// remove process p from queue
wakeup(p);
}
}
,但我不明白信号块中所需的条件
if (s<0) { // 从队列中删除进程 p 唤醒(p); 为什么
我们在这里检查 if(s<0)
How do i Define a semaphore with busy waiting solution ??i got something like this
wait(Semaphore s){
s=s-1;
if (s<=0) {
// add process to queue
block();
}
}
signal(Semaphore s){
s=s+1;
if (s<0) {
// remove process p from queue
wakeup(p);
}
}
but i don't understand the condition required in signal block
if (s<0) {
// remove process p from queue
wakeup(p);
}
why we are checking if(s<0) here
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
该条件可能应该检测队列中是否有任何进程正在休眠(阻塞)。但是,我认为这些条件不正确,考虑到二进制信号量的行为(信号量最初为 s == 1),伪代码应该是
The condition should probably detect if there is any process sleeping (blocked) in the queue. However, I think these conditions are not correct, considering behaviour of a binary semaphore (semaphore initially with s == 1) the pseudocode should be