假设作为交易的一部分,我们必须在任意两个帐户之间进行转帐(包括其中的杂音)。
在典型的多线程环境中,会同时运行多个类似的事务。
通常的约定如下(按照预先设计的约定维护锁定顺序):
lock account A
lock account B
transfer(A,B)
release B
release A
有什么方法可以尝试将锁作为原子操作释放吗?
最佳答案
是的,有:您需要将锁锁定在锁下。换句话说,您需要创建一个锁层次结构。但是此解决方案不是很有效,因为它会降低锁定粒度。
看起来在您的情况下,始终以相同顺序进行锁定就足够了。例如,始终首先使用较小的ID锁定用户。