所以在我写的程序中我有三个函数,让我们称它们为A,B和C,以简化它们。每个函数都需要访问资源X才能工作。
限制是A和B不允许同时运行并且必须适当地同步。但是允许C与A或B同时运行。
这给我带来了一些问题。
首先我尝试将锁定放在A和B上,这样当A被调用时,它获取对X的锁定然后释放它和B一样。这样A和B顺序运行。但是,如果我以这种方式使用锁,则C无法与A或B同时运行。
所以我尝试使用条件变量,其中A必须等待来自B的信号,如果B正在运行并且B必须等待来自A的信号,但是这种相互依赖的调用似乎也不起作用。
不知道该怎么做。
答案 0 :(得分:0)
如果没有对语言的控制,只谈论理论,似乎有一种简单的方法。如果X是持久的,并且可以以接触X的方式调用A,B和C,则A,B和C应该在访问X时传递其名称,例如,通过名为D的方法。是D做的:
所以基本上用D包装X.你甚至可以进一步简化并让D接受锁定或非锁定参数而不是名字。如果是锁定,请检查锁定并可能等待,如果没有锁定,则传递参数。
这种做法看起来过于简单,但我不了解你的实际情况。我刚才也看到了这个问题,所以我不知道你是否需要帮助。