我在等待列表中有n個任務。 每個任務都有與之相關聯的,它包含了一些元數據信息的條目:如何根據一些關聯的元數據從列表中選擇任務?
Task1 A,B
Task2 A
Task3 B,C
Task4 A,B,C
和包含像條目的asssociated的HashMap:
A 1
B 2
C 2
這意味着,如果一個任務,包含在其元信息A已經在運行,則不能同時運行包含 A的其他任務。 但是,由於B具有2個任務的限制,因此任務1和任務3可以一起運行,也可以運行任務3和任務4。 但是task1,task3和task4不能同時運行,因爲A和B的限制都會被違反,儘管C的限制並不違反 。
如果我需要選擇在不同的線程中運行的任務,你會建議什麼邏輯/算法?而且,何時應該調用這個邏輯 ?我將任務列表視爲共享資源,當從中選擇任務 時,可能需要將其鎖定。現在,我認爲當任務被添加到列表中時可能必須調用此邏輯,並且在正在運行的任務完成時也可以調用此邏輯。但是這可能會阻止向列表中添加新元素,除非在運行邏輯之前創建列表副本。
如果我給予比A,B,C' 含有更多條目的任務的優先級高於'A,B',那麼您的邏輯將如何改變?
這是Choosing a data structure for a variant of producer consumer problem和How to access the underlying queue of a ThreadpoolExecutor in a thread safe way的延續,以防萬一任何人想知道問題的背景。
我剛纔讀的鏈接到您的所有其他要求:(( –
儘管如此,我仍然會用專用生產線接近這一點,所以順序訪問邏輯,並消除對明確的鎖的需要。如果生產商(或任何其他線程),想要一個。準備/ INPROGRESS列出的快照,它可以排隊了它的請求,(與請求內的事件等待),生產者輸入隊列,與所有其他的東西一起。生產者日然後讀取可以向請求添加它管理的ready/inProgress隊列數據的快照(複製),然後發信號通知事件。這避免了複雜的鎖定方案(即間歇性死鎖)。 –