Any chance to avoid monitor field in my class?

Yuriy via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu May 8 11:17:42 PDT 2014


On Thursday, 8 May 2014 at 17:49:01 UTC, Steven Schveighoffer 
wrote:
> To what end? What are you trying to save?
I'm trying to reimplement std.variant in a nice OOP way, that 
supports CTFE, zero-size and a minimal amount of void*-casts. For 
that i'm using my VariantPayload(T) class, which i want to be as 
small as possible, as this is supposed to be an utility class 
which you never know how will be used.

>
> It would not be derived from Object, which has the field. In 
> other words, this would crash:
>
> synchronized(cast(Object)obj) { ... }
Wouldn't cast(Object) return null here, so that synchronized will 
throw or assert or smth? I see no reason for a crash.

> Perhaps you meant unshared classes? No, they don't, but a 
> monitor is only allocated on demand, so you don't have to worry 
> about it.
Errm.. I'm not sure i understand the subject correctly, but 
according to Alexandrescu's book, a class declared as shared does 
not require synchronized() over it. I mean, it manages it's 
synchronization inside itself, and it's user just has to trust 
it. And if so, why ever synchronizing() on it?


More information about the Digitalmars-d-learn mailing list