所以我正在做的是尝试生成一个名为transact的函数。当给出一个锁列表[x1; x2; ...; xn],一个函数(f:' a->' b)和一个参数(v:' a) ,running(fv)访问受lock [x1; x2; ...; xn]保护的任何数据,它应该获取锁,在参数上运行函数,并释放锁而不会导致死锁。
我知道如何获得单个互斥锁,如下面的示例简单函数,但我不确定如何查看它们的列表。
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 :(得分:0)
从你的示例代码我想说你想使用List.iter; (显然)Mutex.lock
没有有趣的结果。
避免死锁的经典方法是对锁定执行订单,并始终根据此顺序应用Mutex.lock
。