Thread overview
Re: Thread pause and resume
Apr 06, 2009
Steve Teale
Apr 06, 2009
Steve Teale
Apr 06, 2009
Sean Kelly
Apr 06, 2009
Steve Teale
April 06, 2009
Sean Kelly Wrote:

> == Quote from Steve Teale (steve.teale@britseyeview.com)'s article
> >
> > In some code I wrote at that time, I had a worker thread pool. When a thread had done its job it would mark itself as available then
> pause. The listener thread would then resume it or start one that had never been started. I'm trying to get it running in 2.26. There
> are functions of the same name there but they are nested inside SuspendAll and ResumeAll, and so not accessible.
> 
> This sounds like a classic producer/consumer case.  I suggest using condition variables (core.sync.condition with core.sync.mutex).

The problem is at the moment, that the D documentation covers the language, and Phobos - the latter option exposes Object to some extent.

Anything that is in core.* is undocumented and you have to 'rtfsc' - if you can find it. I can't even find "core.sync" in D files under dmd. Can you point me in the right direction please.

Thanks Steve

April 06, 2009
Steve Teale Wrote:

> Sean Kelly Wrote:
> 
> > == Quote from Steve Teale (steve.teale@britseyeview.com)'s article
> > >
> > > In some code I wrote at that time, I had a worker thread pool. When a thread had done its job it would mark itself as available then
> > pause. The listener thread would then resume it or start one that had never been started. I'm trying to get it running in 2.26. There
> > are functions of the same name there but they are nested inside SuspendAll and ResumeAll, and so not accessible.
> > 
> > This sounds like a classic producer/consumer case.  I suggest using condition variables (core.sync.condition with core.sync.mutex).
> 
> The problem is at the moment, that the D documentation covers the language, and Phobos - the latter option exposes Object to some extent.
> 
> Anything that is in core.* is undocumented and you have to 'rtfsc' - if you can find it. I can't even find "core.sync" in D files under dmd. Can you point me in the right direction please.
> 
> Thanks Steve
> 
As an aside, I realize that Thread.suspend is dodgy, it's been deprecated in Java and C#. Can the metaprogrammers out there come up with a way to insist that a particular member function is called only from the instance that it 'belongs' to. Then presumably it could be made safe.

April 06, 2009
== Quote from Steve Teale (steve.teale@britseyeview.com)'s article
> Sean Kelly Wrote:
> > == Quote from Steve Teale (steve.teale@britseyeview.com)'s article
> > >
> > > In some code I wrote at that time, I had a worker thread pool. When a thread had done its job it would mark itself as
available then
> > pause. The listener thread would then resume it or start one that had never been started. I'm trying to get it running in
2.26. There
> > are functions of the same name there but they are nested inside SuspendAll and ResumeAll, and so not accessible.
> >
> > This sounds like a classic producer/consumer case.  I suggest using condition variables (core.sync.condition with core.sync.mutex).
> The problem is at the moment, that the D documentation covers the language, and Phobos - the latter option exposes Object
to some extent.
> Anything that is in core.* is undocumented and you have to 'rtfsc' - if you can find it. I can't even find "core.sync" in D files
under dmd. Can you point me in the right direction please.

Darnit... core.sync is supposed to be in src/druntime/import/core/sync, but it isn't there for some reason.  I thought this issue had been fixed.  Well, in theory it should be there, and I'm working on getting the docs integrated with the Phobos docs.  They're already generated by the build...
April 06, 2009
Sean Kelly Wrote:

> == Quote from Steve Teale (steve.teale@britseyeview.com)'s article
> > Sean Kelly Wrote:
> > > == Quote from Steve Teale (steve.teale@britseyeview.com)'s article
> > > >
> > > > In some code I wrote at that time, I had a worker thread pool. When a thread had done its job it would mark itself as
> available then
> > > pause. The listener thread would then resume it or start one that had never been started. I'm trying to get it running in
> 2.26. There
> > > are functions of the same name there but they are nested inside SuspendAll and ResumeAll, and so not accessible.
> > >
> > > This sounds like a classic producer/consumer case.  I suggest using condition variables (core.sync.condition with core.sync.mutex).
> > The problem is at the moment, that the D documentation covers the language, and Phobos - the latter option exposes Object
> to some extent.
> > Anything that is in core.* is undocumented and you have to 'rtfsc' - if you can find it. I can't even find "core.sync" in D files
> under dmd. Can you point me in the right direction please.
> 
> Darnit... core.sync is supposed to be in src/druntime/import/core/sync, but it isn't there for some reason.  I thought this issue had been fixed.  Well, in theory it should be there, and I'm working on getting the docs integrated with the Phobos docs.  They're already generated by the build...

A straight answer to a straight question. Thanks Sean. I'll change my code to let used threads die, and start new ones until I see this stuff.