我想知道是否可以使用锁来构建信号量。我见过使用中断禁用/启用的实现,并使用像test和amp; set这样的原子原语,但是有可能只使用锁来实现吗?
似乎做了像
这样的事情guard = 0;
...
while(test&set(guard));
与执行lock.acquire()基本相同。我在这里错过了什么吗?
编辑:我问这个问题的部分原因是因为我在这里阅读这些幻灯片:http://www.cs.washington.edu/homes/arvind/cs422/lectureNotes/l7-6.pdf这些幻灯片使用中断禁用和测试和设置提供信号量的实现,但是使用信号量实现信号量锁定作为一个问题,我认为这意味着使用锁的实现可能由于某种原因不起作用。
答案 0 :(得分:0)
我认为问题是你在那个循环中忙着等待。你所谓的acquire()将是一个进入睡眠状态的操作,只有在获取信号量后才会被唤醒。