如何在Windows和Linux下给定一个线程句柄,我可以确定其对应的静态线程本地存储块的开始和结束?
在C中的“线程fork”(理想的POSIX,但只是Linux的作品)
java线程在terminal中单击时停止执行
Boost.asio和UNIX信号处理
了解MsgWaitForMultipleObjects
在C,multithreading,多个窗口调用一个窗口过程,将每个调用使用新的局部variables,或者我需要一个互斥体?
您可以在线程信息块中找到这些信息。 但请注意,这样做是访问未记录的结构,因此非常不便携,并可能在未来版本的Windows中打破 。 看起来你可以从TIB中获得当前线程的线程本地存储区; 我不确定谁会得到另一个线程的TLS。
您可以尝试挖掘进程环境块(PEB),位于TIB的偏移地址0x30处,但同样,您正在处理可能会更改的未记录结构。
Windows线程信息块在FS:0x2C处给出线程本地存储阵列的地址,这是一个指向每个模块的TLS的指针数组。 问题在于没有指示该数组有多大,或者每个模块TLS数据块有多大。
有关各种与线程本地存储相关的功能的更多信息,请参阅MSDN 。 您可以使用TlsGetValue()来获取特定的TLS值; 不要在内存中徘徊,即使它工作 – 你只是调用未定义的行为,这可能会发生在未来的Windows版本中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。