繁体   English   中英

是否在该线程的上下文中对每个线程执行了 thread_local 初始化

[英]Is thread_local initialization performed on each thread, in the context of that thread

如果我有一个带有动态初始值设定项的thread_local存储类的变量,它可能会被初始化多次:至少对每个使用它的线程进行一次。

这种初始化是在新创建的线程的上下文中发生的,还是可能发生在不同的线程上?

具体来说,以下任一项是否有效:

thread_local int tid1 = pthread_self();

thread_local int tid2 = syscall(SYS_gettid);

...从某种意义上说tid1tid2获得当前线程的正确 ID。

在 Windows 和 Visual C++ 中,它是通过 TLS(线程本地存储)完成的。 TLS 函数在其线程的上下文中运行。

更多: 这里这里

@ALX23z 的评论是正确的 - 这些变量必须由操作系统函数访问,否则每个人都可以看到它们的内存地址。

当然,编译器也可以自由创建具有相同变量名的不同内存地址。 在这种情况下,不会使用 TLS,并且&var将是每个线程的不同指针。 但这需要编译器级别的工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM