www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Use the D dylib in my C++ program,when the D's GC(in the dylib

reply Dsby <dushibaiyu yahoo.com> writes:
Use the D dylib in my C++ program,when the D's GC(in the dylib 
runtime) run. will not my program stop?
My lib.so is writed in D, and I use the GC.and then I am used the 
dll in my program that is writed in C++.
I want to know when the GC(in lib.so's runtime) start runing, 
will my program  be stoped,until the GC stop?

sorry , my english is bad.

I will use chinese to describe this question:
我用D语言写了一个的动态库,其中里面的内存分配和回收用的是GC。现在我的C++程序去调用这个动态库。我想知道,当动态库所依赖的的D的运行时中GC运行的时候,是不是我的整个程序都会暂停住,知道GC回收完毕再次唤醒?
Jan 30
parent reply Chris Wright <dhasenan gmail.com> writes:
On Sat, 30 Jan 2016 14:41:18 +0000, Dsby wrote:

 Use the D dylib in my C++ program,when the D's GC(in the dylib runtime)
 run. will not my program stop?
The GC will stop every thread it knows about. If you have a C++ thread that you want to run while the GC is running, you can get that by not telling the D runtime about it. This will limit your ability to interact with D from that thread somewhat -- and it will interfere more with your ability to *safely* interact with D even more. If you never allocate GC memory, of course, the GC will never run.
Jan 30
parent reply Dsby <dushibaiyu yahoo.com> writes:
On Saturday, 30 January 2016 at 16:06:37 UTC, Chris Wright wrote:
 On Sat, 30 Jan 2016 14:41:18 +0000, Dsby wrote:

 Use the D dylib in my C++ program,when the D's GC(in the dylib 
 runtime) run. will not my program stop?
The GC will stop every thread it knows about. If you have a C++ thread that you want to run while the GC is running, you can get that by not telling the D runtime about it. This will limit your ability to interact with D from that thread somewhat -- and it will interfere more with your ability to *safely* interact with D even more. If you never allocate GC memory, of course, the GC will never run.
Thanks, if I use the D dylib,I should run " rt_init(); " in every thread which i used the D dylib?
Jan 30
parent reply Mike Parker <aldacron gmail.com> writes:
On Sunday, 31 January 2016 at 03:45:01 UTC, Dsby wrote:

 Thanks, if I use the D dylib,I should run " rt_init(); " in 
 every thread which i used the D dylib?
No. rt_init only needs to be called once for the process. You need to call core.thread.attach_this [1] so that runtime is aware of your external thread. Note that this does not apply to the thread that calls rt_init. [1] http://dlang.org/phobos/core_thread.html#.thread_attachThis
Jan 30
parent reply Mike Parker <aldacron gmail.com> writes:
On Sunday, 31 January 2016 at 05:28:02 UTC, Mike Parker wrote:

 need to call core.thread.attach_this [1] so that runtime is
Sorry, that's core.thread.thread_attachThis
Jan 30
parent Dsby <dushibaiyu yahoo.com> writes:
On Sunday, 31 January 2016 at 05:29:06 UTC, Mike Parker wrote:
 On Sunday, 31 January 2016 at 05:28:02 UTC, Mike Parker wrote:

 need to call core.thread.attach_this [1] so that runtime is
Sorry, that's core.thread.thread_attachThis
ok。thanks.
Jan 30