【发布时间】:2012-09-11 00:38:26
【问题描述】:
所以在我正在编写的程序中,我使用双向广度优先搜索来搜索图形。为此,我在 1 个线程中运行 1 个广度优先搜索,然后在另一个线程中运行一个。现在,当另一个搜索中的一个元素被命中或找到目标时(这从未真正发生过,但以防万一它出于某种原因......),就说搜索找到了最佳解决方案。
我遇到的问题是,我需要将这个最优解保存到一个字段中,因为我需要继续找到所有的解决方案,但是由于两个线程都在同一时间(我认为)。
有没有办法阻止对最后到达那里的线程的访问?我尝试过使用 AtomicReference 及其 compareAndSet 方法,但这并没有成功。值仍然搞砸了....
顺便说一句,我使用的是 java,而对于线程,我使用的是 Callable 对象。
【问题讨论】:
-
你的设计没有内在缺陷吗?假设两个搜索都在第 5 级的第一个元素上,并且它们找到了彼此。你会认为最短路径是 10。但是如果第一次搜索中第 5 级的第二个元素在第二个图的访问节点中,则可能有一个长度为 9 的解决方案。
-
@Mark 我会跟踪每次搜索访问了哪些节点,并在添加之前检查相反的集合成员资格。基本上,当集合中出现交集时,就说找到了解决方案。我应该让我的实现更清晰
-
好的,我想我在“答案”中修复了这个例子。我真的很感兴趣你如何在这种情况下得到正确的答案。也许我误解了你的方法。
标签: java concurrency atomic atomicreference