gpt4 book ai didi

concurrency - 锁/条件变量问题

转载 作者:行者123 更新时间:2023-12-03 05:56:30 25 4
gpt4 key购买 nike

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

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

这给我带来了一些问题。

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

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

不知道该怎么办。

最佳答案

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

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

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

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

关于concurrency - 锁/条件变量问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13120398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com