Deprecate synchronized classes please!

IGotD- nise at nise.com
Tue Sep 6 09:30:51 UTC 2022


On Tuesday, 6 September 2022 at 09:09:49 UTC, Loara wrote:
>
> Now it seems that D is moving from `synchronized` approach 
> (that brings a lot of deadlocks threats) to a `shared` approach 
> (passing only references to integer variables and access them 
> only with atomic operations). Maybe we should finally deprecate 
> `synchronized` class and leave only `synchronized` functions 
> inside `@system` code since they can't be safe due to deadlock 
> risks?

No, the fundamental principle of shared and synchronized is 
different. With synchronized classes the compiler automatically 
inserts mutex calls in order to ensure no data races. This is 
really good as you don't need to worry forgetting about not 
acquiring/releasing a mutex. Shared is a bit different that 
currently rely on atomic operations but this approach is flawed 
in my opinion. Shared should be "do anything you want, you are on 
your own".

The reason is that you cannot always rely on atomic operations is 
because they are very difficult, no compiler can ensure it and it 
is often not even possible. Therefore mutex are often used and 
therefore synchronized has its place and should be the most 
common way to share data structures.

The golden rule of shared memory is, take the lock. This means 
you are often wasting your time with atomic operations also 
suddenly when you have several atomic variables you open up for 
data races again. Atomic operation often only works when there is 
one variable, when there are several you often must take the 
lock. Several atomic variables are often mind twisting difficult 
in order to get it right.

Something that I miss in D is the "user space spinlock", which in 
Windows are EnterCriticalSection/LeaveCriticalSection and on 
Linux the futex. These are not pure spinlocks but the fastest you 
have that are safe. Pure spinlocks are not recommended for user 
programs. We need a cross platform interface for these. For 
faster lock times use these.

Take the lock


More information about the Digitalmars-d mailing list