实现互斥锁确保有限的等待

时间:2011-02-25 19:25:52

标签: multithreading mutex

这是我遇到的面试问题,我不知道如何回答。

首先,什么是有限的等待互斥,你能给我一些互斥的例子,确保有限的等待,并不能确保有限的等待吗?

其次,我不知道如何实现它,因为似乎互斥是操作系统的内置功能。<​​/ p>

你会如何回答这个面试问题?我可以使用什么样的原子操作来实现互斥?以及如何?

2 个答案:

答案 0 :(得分:0)

你当然可以实现在操作系统永不停机的互斥锁之上超时的互斥锁。使用操作系统提供的互斥锁来管理对您自己的计数器的访问,确保始终快速释放它。

  

重复
  ...获取计数器上的OS互斥锁   ...检查柜台,见&gt; 0
  ...... ...如果大于0,则递减,释放OS互斥锁,返回超时 - 已获取互斥锁
  ...释放计数器上的OS互斥锁   ...检查是否超时
  ......如果超时,返回超时-mutex已经超时了   ......睡了一段时间   结束重复

当然,POSIX互斥锁有一个trylock函数,它使等待循环变得微不足道。

忙碌等待当然是浪费CPU能力。可以实现更高效的实现,例如POSIX具有条件变量。

答案 1 :(得分:0)

似乎有两种“有界等待”的用法。 One usage seems to be a simple time-based meaning

  

任何特定进程的等待时间都有限制进入其关键部分。

Another usage seems to be a thread-count meaning

  

请求进入关键部分的流程只需要等待有限数量的其他流程进入和离开关键部分。


不幸的是,我不知道如何真正回答这个问题。它似乎依赖于OS原语。也许他们正在寻找像Peterson's solution这样的东西。