信号量可以用锁来制作吗?

时间:2011-09-13 17:35:30

标签: synchronization

我想知道是否可以使用锁来构建信号量。我见过使用中断禁用/启用的实现,并使用像test和amp; set这样的原子原语,但是有可能只使用锁来实现吗?

似乎做了像

这样的事情
guard = 0;
...
while(test&set(guard));

与执行lock.acquire()基本相同。我在这里错过了什么吗?

编辑:我问这个问题的部分原因是因为我在这里阅读这些幻灯片:http://www.cs.washington.edu/homes/arvind/cs422/lectureNotes/l7-6.pdf这些幻灯片使用中断禁用和测试和设置提供信号量的实现,但是使用信号量实现信号量锁定作为一个问题,我认为这意味着使用锁的实现可能由于某种原因不起作用。

1 个答案:

答案 0 :(得分:0)

我认为问题是你在那个循环中忙着等待。你所谓的acquire()将是一个进入睡眠状态的操作,只有在获取信号量后才会被唤醒。