2015-05-07 77 views
0

所以我正在做的是試圖產生一個叫做transact的函數。當給出鎖[x1; x2; ...; xn],函數(f:'a - >'b)和參數(v:'a)列表,運行(fv)訪問受到鎖[x1; x2; ...; xn],它應該獲取鎖,在參數上運行該函數,並釋放鎖而不會導致死鎖。Ocaml獲取互斥鎖列表

我知道如何獲得單個互斥鎖,以下是一個示例簡單函數,但我不知道如何查看它們的列表。

method deposit(int amt):unit = 
    Mutex.lock mylock ; 
    if balance + amt < max_balance then 
     balance <- balance + amt ; 
    Mutex.unlock mylock 
end 

我想使用List.iter函數來通過鎖或映射來應用函數嗎?我正在使用Core.Std庫。

回答

0

從你的示例代碼我會說你想使用List.iter;有(顯然)沒有有趣的結果Mutex.lock

避免死鎖的經典方法是對您的鎖施加一個訂單,並始終根據此訂單應用Mutex.lock