Implementing multithreading policy templates in D?

Sean Kelly sean at invisibleduck.org
Sun Jun 8 11:38:44 PDT 2008


== Quote from Brian Price (blprice61 at yahoo.com)'s article
> downs Wrote:
> > Brian Price wrote:
> > > Greetings,
> > >
> > > While implementing a design I ran into a need for multiple implementations with different threading policies.  It looked to me as if
porting Loki's Threading Model policies over to D would be just the ticket.  Unfortunately there's no mutex-like class in Phobos that I can
find and Object's monitor is not exposed so no way to acquire/release on it other than through synchronized.
> > >
> <<---- snip ---- >>
> > >
> > > Having used about every 'mainstream' language over the past twenty odd years, I figure either I'm missing something huge and need
to learn an entirely new approach or there's something missing from the standard library.  So I'm left with three questions:
> > >
> > > Did I miss something in the docs/std lib code?
> > >
> > > Is there a way to implement flexible threading policies using synchronized statements?
> > >
> > > What are the chances we'll see Object sporting wait/notify methods or lock/unlock methods in a future release?
> > >
> > > Thanks,
> > > Brian
> >
> > Scrapple.Tools.Threads implements the most important threading primitives on Win32 and Posix.
> >
> > http://dsource.org/projects/scrapple/browser/trunk/tools/tools/threads.d
> >
> >  --downs
> Thanks, it looks good, does it compile & run under D 2.014?
> For the moment I'm using the simple hack:
> extern (C) void _d_monitorenter(Object obj);
> extern (C) void _d_monitorexit(Object obj);
> for a basic acquire/release mutex, but as my needs expand I want to avoid reinventing the wheel.
> I'd be a lot more comfortable though if the powers that be would expose those two functions as methods on Object.

I gave this a lot of thought, and decided that building the functionality into Object is a bad idea.  However,
the Mutex classes in Tango are integrated with the "synchronized" statement, which produces a similar
result:

auto m = new Mutex;
auto c = new Condition( m );

synchronized( m )
{
    c.wait;
}


Sean



More information about the Digitalmars-d mailing list