How to ensure a thread cannot be blocked by the GC?

via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Dec 3 16:27:47 PST 2014


On Wednesday, 3 December 2014 at 22:53:48 UTC, ponce wrote:
> I have a DLL written in D that gets called by two different 
> threads, created by a non-D host program (audio plugin). I did 
> not create those threads, but my understanding is that they get 
> "attached" to the D runtime.
>
> Thread A is a real-time callback and should not ever block. 
> @nogc seems perfect for this.
>
> Thread B and it's impractical to make it @nogc.
>
> How to ensure that a collection triggered by thread B never 
> stop thread A in stop the world collections?

I assume you are referring to Windows and I have no good answer 
for you. Could it not vary between implementations or is it 
language defined? However, a real time thread ought to be 
specified by the OS as being non-interruptable (but with a 
timeout). Otherwise it should not be labeled as realtime… 
AudioUnits on OS-X are called with realtime priority.

IRRC the D GC uses SIGUSR1 on unix, so there you should be able 
to specify a signal mask to tell the OS whether to block the 
thread on collection or not.


More information about the Digitalmars-d-learn mailing list