sách gpt4 ai đã đi

Câu hỏi về biến khóa/điều kiện

In lại 作者:行者123 更新时间:2023-12-03 05:56:30 27 4
mua khóa gpt4 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 的信号,但这种相互依赖的调用似乎也不起作用。

不知道该怎么办。

1 Câu trả lời

不控制语言,只讲理论,似乎有一个简单的方法。如果 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/

27 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com