Shared method problem

Stanislav Blinov stanislav.blinov at gmail.com
Wed Feb 12 06:00:18 PST 2014


To be concise: don't put all your eggs into one basket. If you 
want shared class - write shared class.

> Is there really need to allow shared objects different methods, 
> and non-shared objects different methods? Why don't we separate 
> implementation instead of methods according to being shared?

Exactly. Separate implementations. Completely. Shared is not just 
about "insert synchronized everywhere and be done with it". As a 
storage class, it tells the compiler "don't reorder accesses to 
this variable". Yes, as method attribute, it disallows you to 
call this method on an unshared reference. But that doesn't mean 
you now should rush to create both shared and non-shared methods 
for your classes: you'll be doing yourself a disservice. Design 
and implementation of concurrent data structures is very 
different from non-concurrent ones. Look up any concurrent data 
structure and see how drastically it differs from the plain, 
"single-threaded" one, even if it's built on lock-based 
synchronization, let alone lock-free. Providing two different 
implementations (that require different data for e.g. 
bookkeeping) inside one class is impractical and error-prone.

If you're just going to synchronize every single method call for 
your class on a mutex, then you don't really need shared 
qualifier at all (well, you'll need to briefly cast the reference 
to shared to e.g. pass it to another thread).

Also, I assume you understand that 'shared' and all its aspects 
are not yet fully realized in the language. Andrei mentioned that 
finalizing 'shared' should be made one of the primary goals. 
Maybe we would see some interesting syntactic solutions, type 
system improvements, etc. I think we already can help with some 
things (see e.g. my thread about shared sync primitives).

But regardless, design your single-threaded and concurrent data 
separately, go easy on yourself :)


More information about the Digitalmars-d mailing list