【发布时间】:2016-11-11 12:58:21
【问题描述】:
将std::vector 声明为thread_local 有什么好处吗?
喜欢
static unique_ptr<std::vector<ObjectA>> vecVariable;
将std::vector 声明为thread_local 不会使其操作像pop_back() 和erase() 同步。
就像在每个 STL 容器中一样,如果有一个线程修改容器,则不会有并发线程读取或写入同一个容器,所以我不能在 vector 对象上执行 erase() 和 pop_back()并发/多线程环境。
即使我将向量声明为thread_local,我的代码也会在其中一个操作中崩溃。我知道我可能需要在锁定状态下执行这些操作,但我只是想了解何时有人将 std::vector 定义为 thread_local ?
【问题讨论】:
-
同时他们将任何变量定义为 thread_local - 当他们每个线程都有自己的实例时。
标签: c++ multithreading vector stdvector thread-local