3

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

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

这给我带来了一些问题。

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

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

不知道该怎么办。

4

1 回答 1

0

不用控制语言,只谈理论,似乎有一个简单的方法。如果 X 是持久的,并且 A、B 和 C 可以以一种接触 X 的方式被调用,那么 A、B 和 C 应该在访问 X 时传入它们的名称,例如,通过一个名为 D 的方法。这里将做 D 做的事:

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

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

这种方法可能看起来过于简单,但我对你的实际情况了解不多。我看到这个问题也是不久前被问到的,所以我不知道您是否需要帮助。

于 2013-12-09T13:02:01.863 回答