On Tuesday, 13 October 2015 at 19:05:31 UTC, Dicebot wrote:
On Tuesday, 13 October 2015 at 18:28:23 UTC, Marco Leise wrote:
Guys, sorry to break into your wishful thinking, but
synchronized(mutex) {}
already works as you want it to since as long as I can think.
Yes, it takes a parameter, yes it calls lock/unlock on the
mutex. :)
Yes, and I am saying that it doesn't justify presence of
`synchronized` keyword in the language at all, being historical
legacy misfeature.
The same can be done trivially with a guard/autolock object,
because we have RAII. It can also be done with scope statements,
though that's more verbose. I suspect that C# has it primarily
because they don't have RAII.
I don't know that it really hurts D to have synchronized
statements, but I do agree that they really don't add much in the
way of value. And it's not like it's hard to come up with cases
where they don't even work, whereas a guard/autolock could (e.g.
having to unlock the mutex partway through a block, possibly
relocking it later in the block, possibly not).
- Jonathan M Davis