On 8/30/25 6:34 PM, Steven Schveighoffer wrote:

> The original feature never worked as intended. That section of the book
> should be removed.
>
> The correct way to do this is a nested synchronized statement:
>
> ```d
> synchronized(from) synchronized(to)
> {
>     ...
> }
> ```
>
> -Steve

That's a recipe for a deadlock though: Imagine the same function is running for two bank accounts (A and B), each sending money to each other.

In one case, 'from' is A, and 'to' is B. In the other case, 'from' is B, and 'to' is A.

One thread locks A and the other locks B, then they both wait for the other forever.

When the language lacks a canonical order for multiple locks, the programmer must come up with a scheme to sort them and attempt to lock in the same order in both threads.

Ali

Reply via email to