【发布时间】:2017-01-23 07:08:36
【问题描述】:
问题本身:
class B{/*...*/};
class A {
/* members */
NON-static thread_local B var; // and a thread_local variable here
ret_t method(/* args */);
};
我希望var 独立存在于每个线程和每个实例中。
更大的(完整的)问题:
A 的实例在线程间共享。 B 是调用A::method 所必需的一些资源,它必须独立于线程以避免竞争条件(即A::method 必须对var 具有“写访问权”)。而A的不同实例对应的B也不同。
我想出的一个不完全令人满意的方法是有一些容器(比如std::unordered_map<THREAD_IDENTIFIER_TYPE, B>)来存储每个var 对应于每个实例的每个thread。但是,这既不会限制跨线程访问vars,也不会阻止整个容器被修改。 (因此这需要开发人员足够小心地编写安全代码。)
我在 SO 上看过一些关于 java ThreadLocal 关键字(?)的帖子,但似乎没有一个提供真正有效的想法。有什么建议吗?
【问题讨论】:
标签: c++ multithreading