Talk by Herb Sutter: Bridge to NewThingia
claptrap
clap at trap.com
Thu Jul 2 14:44:50 UTC 2020
On Thursday, 2 July 2020 at 12:36:09 UTC, IGotD- wrote:
> On Thursday, 2 July 2020 at 11:13:41 UTC, claptrap wrote:
>>
>> If you're doing a plugin the host callback thread wont be
>> known to the D runtime and so the GC wont pause it. So as long
>> as you dont call anything that might trigger the GC while in
>> the callback you wont get GC pauses affecting the audio
>> rendering. This can be mechanically checked by the compiler
>> with the @nogc attribute.
>>
>> The point is even in C++ you should never ever do malloc/free
>> in the audio thread, you might get away with it under low CPU
>> load, but if you're running at high load it can barf the
>> audio. So GC is just a variation on the same problem. Dont
>> call malloc/free, dont use GC in anyway.
>>
>> You also have to make sure that the GC knows about your
>> pointers, so if you have a pointer to something, make sure
>> it's reachable from stuff the GC will scan. If it exists only
>> on the stack in the audio thread the GC could collect it as it
>> wont know it is still in use.
>>
>> Also see this...
>>
>> https://github.com/AuburnSounds/Dplug
>
> I think you can make a callback thread to D work if you have a
> trampoline function and then call
>
> thread_attachThis
> rt_moduleTlsCtor
>
> before calling the actual callback. Then the thread will be
> known to D runtime.
Sorry maybe I was unclear, I'm saying keep the real time thread
hidden from D runtime & GC. Just make sure any GC memory
referenced by the real time thread is also referenced in the
threads/data that is known about by the runtime / GC. Or only
pass the real time threa malloced memory.
More information about the Digitalmars-d-announce
mailing list