【发布时间】:2013-01-24 11:38:46
【问题描述】:
我有一些使用线程本地存储的 C++ 代码,每个线程都有一个可以将数据推入的向量。
我使用 TLS 存储每个线程的索引 ID,这可用于查找将数据推送到哪个向量。然后它会执行大量代码,将数据推送到向量中。
我想知道的是,操作系统是否有可能在获取指向线程本地对象的指针后重新安排我的代码在不同的线程上执行。 (到目前为止,代码执行得很好,我还没有看到这种情况发生)。但如果可能的话,这似乎肯定会破坏我的程序,因为现在两个线程可以拥有相同的对象。
假设这是真的,即使对于使用任何复杂性 TLS 的任何代码,这似乎也是一个问题,TLS 是否仅适用于您不获取地址的简单对象?
谢谢!
【问题讨论】:
-
你使用什么样的线程库?您是否创建自己的线程?使用偷工减料?
-
我使用英特尔 TBB,没有显式线程,只是基于任务
-
AFAIK Intel TBB 不会在线程之间迁移任务,因此您是安全的。 (没有操作系统在你背后改变线程ID这样的事情)
标签: c++ context-switch thread-local-storage