Le 12/11/2012 13:25, Regan Heath a écrit :
First off, IIRC object contains a mutex/monitor/critical section, which
means all objects contain one. The last discussion saw many people
wanting this removed for efficiency. I propose we do this. Then, if a
class or struct is declared as "shared" or a "shared" instance of a
class or struct is constructed we magically include one (compiler magic
which I hope is possible).


As already explain in the thread you mention, it is not gonna work. The conclusion of the thread is that only synchronized classes should have one mutex field.

Secondly I say we make "shared" illegal on basic types. This is a
limitation(*) but I believe in most cases a single int is unlikely to be
shared without an accompanying group of other variables, and usually an
algorithm operating on those variables. These variables and the
algorithm should be encapsulated in a class or struct - which can in
turn be shared.


Shared reference counting ? Disruptor ?

Now.. the synchronized() {} statement can do the magic described above
(as ScopedLock) for us. It would be illegal to call it on a non "shared"
instance. It would acquire the mutex and cast away "shared" inside the
block/scope, at the end of the scope it would cast shared back and
release the mutex.

(*) for those rare cases where a single int or other basic type is all
that is shared we can provide a wrapper struct which is declared as
"shared".

Reply via email to