gpt4 book ai didi

java - 实现简单工作队列的问题

转载 作者:太空宇宙 更新时间:2023-11-04 08:53:40 26 4
gpt4 key购买 nike

我在实现简单的工作队列时遇到了麻烦。做了一些分析,我面临着一个微妙的问题。工作队列由常规链表支持。代码如下(简化):

0. while (true)  
1. while (enabled == true)
2. acquire lock on the list and get the next action to be executed (blocking operation) (store it in a local variable)
3. execute the action (outside the lock on the list on previous line)
4. get lock on this work queue
5. wait until this work queue has been notified (triggered when setEnabled(true) has been callled)

setEnabled(e) 操作如下所示(简化):

enabled = e
if (enabled == true)
acquire lock on this work queue and do notify()

虽然这可行,但有一种情况会发生死锁。它发生在以下罕见的情况下:

  • 在步骤 (3) 中执行某个操作时,会调用 setEnabled(false)
  • 在进入步骤 (4) 之前,调用 setEnabled(true)
  • 现在第 (5) 步一直等待,因为该工作队列已经收到通知但我们错过了

如何解决这个问题?我已经研究这个问题有一段时间了,但我无法想出解决方案。

请注意,我对线程同步还很陌生。

非常感谢。

最佳答案

不确定移动 Java 上的多线程内存模型如何。对于桌面 Java,我非常确定它一直到 Java 1.5 都存在一些严重的错误。

使用真实的 Java 代码比伪代码更容易进行故障排除..但如果这是 Java 1.1 错误而不是代码错误,我不会感到惊讶...

关于java - 实现简单工作队列的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2795486/

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