On Tue, 01 Nov 2011 02:42:16 +0100, Martin Nowak <d...@dawgfoto.de> wrote:
On Mon, 31 Oct 2011 19:13:57 +0100, Michel Fortin
<michel.for...@michelf.com> wrote:
On 2011-10-31 17:07:31 +0000, Sean Kelly <s...@invisibleduck.org> said:
writeThis really shouldn't be const, it should be shared. The problem
was t
hat making writeThis a shared pass by value param implied a
synchronized loa
d for writeThis, which is undesirable for cas. So I left the
declaration of c
as as specified in TDPL and thought I'd figure this out later.
Perhaps it should be Unqual!(shared(V2)). That way if V2 is a pointer
it'll be tail-shared.
That won't work for class references though. For that you'd need my
"const(Object)ref" patch rusting in DMD's pull requests.
It's a pitty that cas doesn't work with classes.
Does anybody have a good idiom for lazy initialization of shared classes
then?
I used to use this one, which doesn't compile any longer.
----------
class Library
{
void init() {}
}
private shared Library _library;
shared(Library) library()
{
if (_library is null)
{
auto instance = new shared(Library)();
synchronized(instance)
{
if (cas(&_library, cast(Library)null, instance)
instance.init();
}
}
return _library;
}