Non-GC threads

Vladimir Panteleev vladimir at thecybershadow.net
Tue May 17 17:35:59 PDT 2011


On Sun, 15 May 2011 21:30:32 +0300, Piotr Szturmaj <bncrbme at jadamspam.pl>  
wrote:

> What are the consequences of using non garbage collected threads in D?

If you move pointers around while the GC is looking for them, the GC might  
miss them and free referenced memory. This will lead to memory corruption.

The GC will also not be able to scan the stack and registers of threads it  
doesn't know about.

> I want to write a reliable communication protocol, but I don't want  
> suspend this code by the GC.

The GC might be much faster than you think it is. You should try  
benchmarking the GC with a typical memory load, the delay might be  
acceptable for your purposes.

> Is there any method to bind allocated memory to thread itself, so it  
> will be freed after thread terminates, but not in the middle of  
> execution?

You can use malloc/free together with RAII. Or something hacky and  
platform-dependent like pthread_cleanup_push().

> This is important because in the other case, GC could free memory  
> referenced by non-GC thread.

I can think of no perfect solution for your case. You'll either need to  
give up on using managed memory, or accept the periodical delays of the GC.

-- 
Best regards,
  Vladimir                            mailto:vladimir at thecybershadow.net


More information about the Digitalmars-d-learn mailing list