簡體   English   中英

共享和鎖定多個線程之間的固定數量資源

[英]Sharing and locking a fixed number resources of between multiple threads

我有一個固定數量n的相同資源,需要在n或多個線程之間共享。 每當線程需要使用資源時,它可以使用任何可用的資源,為此它運行不確定的時間量(即使用時間不均勻),然后釋放它。

管理此場景的優秀Java數據結構是什么? 我只能想到一種方法,即使用LinkedBlockingQueuetakeput操作分別鎖定和釋放資源。 我只是喜歡並發專家的建議:

對於那些好奇的人:需要共享的資源是用於計算多元正常CDF和時刻的非重入FORTRAN庫的相同副本。 壯觀的數字圖書館,但寫在一個線程安全代碼不值得擔心的時代。 在這種情況下,我們制作n個庫的副本,其中n = Runtime.getRuntime().availableProcessors()

編輯 :我不想創建執行此庫的線程開銷。 它已經從多個線程調用; 調用線程應該能夠鎖定資源並繼續使用它。

更新 :有關動機和實施,請參閱https://stackoverflow.com/a/19039878/586086

您描述的模式是資源池 當資源相當簡單時,線程安全隊列是處理這種情況的合理方法,盡管您也可以考慮池庫,例如pool4j

創建一個包含固定資源列表的單例類,以及將每個資源標記為可用或不可用的關聯標志,以及2個同步方法,如:

synchronized Resource getResource(){
   find an unavailable resource, mark it as unavailable and return it
}

synchronized int returnResource(Resource r){
   find the matching resource on list and mark it as available.
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM