锁定/条件变量问题

时间:2012-10-29 11:04:55

标签: concurrency locks

所以在我写的程序中我有三个函数,让我们称它们为A,B和C,以简化它们。每个函数都需要访问资源X才能工作。

限制是A和B不允许同时运行并且必须适当地同步。但是允许C与A或B同时运行。

这给我带来了一些问题。

首先我尝试将锁定放在A和B上,这样当A被调用时,它获取对X的锁定然后释放它和B一样。这样A和B顺序运行。但是,如果我以这种方式使用锁,则C无法与A或B同时运行。

所以我尝试使用条件变量,其中A必须等待来自B的信号,如果B正在运行并且B必须等待来自A的信号,但是这种相互依赖的调用似乎也不起作用。

不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

如果没有对语言的控制,只谈论理论,似乎有一种简单的方法。如果X是持久的,并且可以以接触X的方式调用A,B和C,则A,B和C应该在访问X时传递其名称,例如,通过名为D的方法。是D做的:

  • 接听来电者姓名和参数。
  • 如果调用者是C,则将参数传递给X。
  • 如果来电者是A或B,请检查X上是否有锁定。
  • 如果没有锁定,请将参数发送给X。
  • 如果有锁,请等待开启。

所以基本上用D包装X.你甚至可以进一步简化并让D接受锁定或非锁定参数而不是名字。如果是锁定,请检查锁定并可能等待,如果没有锁定,则传递参数。

这种做法看起来过于简单,但我不了解你的实际情况。我刚才也看到了这个问题,所以我不知道你是否需要帮助。