On Friday, 13 May 2016 at 09:17:06 UTC, Andrei Alexandrescu wrote:
A reader reminded me (thanks!) that in TDPL synchronized with
multiple argument does the right thing - locks objects in
increasing order of address.
So now to everyone's unpleasant surprise, the sample code in
TDPL compiles and runs, it just has difficult to detect
problems.
So regardless of the discussion of the comma operator,
synchronized with multiple arguments should just work.
+1
Is synchronized being lowered to some function calls?
Here's the relevant code:
https://github.com/dlang/dmd/blob/master/src/statement.d#L4974
IIUC, the code assumes that there is a single object that needs
to be locked. Which is definitely wrong.
BTW, should synchronized (obj) allow calling non-shared methods
of obj inside the block?