因此,在我正在編寫的程序中,我使用雙向寬度優先搜索來搜索圖形。我通過在1個線程中運行1個寬度的第一個搜索並在另一個線程中運行。現在,搜索被稱爲找到了最佳解決方案,當它從其他搜索的元素被擊中,或者當目標被找到時(它從來沒有真正發生過,但僅僅是因爲某種原因。)。限制對某個字段的併發訪問
我遇到的問題是我需要將這個最佳解決方案保存到一個字段中,因爲我需要繼續查找所有解決方案,但是字段值越來越混亂,因爲兩個線程都在同時(我認爲)。
有沒有辦法阻止誰最後到達線程的訪問?我試過使用一個AtomicReference和它的compareAndSet方法,但沒有做到這一點。值仍然會搞砸....
btw我使用java,併爲我使用Callable對象的線程。
在您的設計中是否存在固有的缺陷?假設兩個搜索都在第5級的第一個元素上,並且他們找到了對方。您可以考慮最短路徑爲10.但是如果第二個圖中的第一個搜索WAS中的第五級第二個元素訪問了節點,那麼可能有9長度的解決方案。 –
@Mark我追蹤每次搜索訪問過哪些節點,並在添加之前檢查相反的集合成員資格。基本上,當集合中出現交叉點時,就說找到了解決方案。我應該讓我的執行更清晰 – Ethan
好吧,我想我在我的「答案」中修正了這個例子。我真的很感興趣,你如何在這種情況下得到正確的答案。也許我誤解了你的方法。 –