Fibers and TLS woes
Kai Nacke via digitalmars-d-ldc
digitalmars-d-ldc at puremagic.com
Sat Feb 28 10:32:23 PST 2015
On Saturday, 28 February 2015 at 18:10:13 UTC, Dan Olson wrote:
> I discovered why one of the Fiber unittests in core.thread
> would crash
> on iOS. TLS address is looked up based on the thread. In LDC
> optimized
> code, the address lookup may only happen once in a function if
> the
> address can be cached in a register. This is good, because it
> makes
> multiple TLS access faster in a single function.
>
> Now, Fibers are permitted to be run on different threads, as
> long as
> only one thread has it active at a time. The problem is that
> the Fiber
> context may be on a different thread before and after a
> yeild(). If a
> TLS address is cached, the previous thread's TLS is accessed
> after the
> yield call instead of the current threads TLS.
>
> To make the one Fiber unittest work on multicore, I am switch
> to using
> pthread_getspecific intead of TLS for sm_this. But in general
> this is a
> problem with other architectures besides arm. I checked
> assembly of
> x86_64 and TLS addresses are cached too when optimization is on.
>
> I also looked at DMD asm, and it does not seem to cache TLS
> addresses on
> OS X at least.
> --
> Dan
Hi Dan,
this is issue 666:
https://github.com/ldc-developers/ldc/issues/666
Regards,
Kai
More information about the digitalmars-d-ldc
mailing list