我想開發一個由線程池組成的應用程序,使用工作 - 竊取算法來同時執行任務。併發訪問組對象
這些任務
- 訪問一組預定義對象;
- 必須「原子地」獲取它在實際運行之前訪問的所有對象的讀/寫權限;
- 完成後(並保證最終完成)釋放它們獲取的對象。
解決此問題的一種可能方法是讓每個線程一次選取一個任務,然後嘗試使用預定義的順序鎖定每個對象。如果至少有一個失敗,則釋放所有鎖,然後繼續執行另一個任務。
然而,這種方法增加了大對象依賴性的任務匱乏的可能性,甚至可能導致活鎖。
是否有另一種獲取一組鎖的同時最大化併發性的方法? (沒有全局鎖定)或者可能以不再需要的方式更改系統? 如果是這樣,有什麼好的論文呢?
ps:正如thiton回答,這是「餐飲哲學家」問題的一個普遍版本。我正在尋找非集中式解決方案,特別是在高負載情況下運行良好的算法(添加和刪除任務)。
我現在記得!更確切地說,它是沒有2叉/哲學家限制的「廣義餐飲哲學家」問題。 –