【发布时间】:2017-02-01 07:39:33
【问题描述】:
示例代码。
class Obj
{
public:
void doSome(void)
{
std::cout << "Hello World!" << std::endl;
}
};
std::unordered_map<int, std::unique_ptr<Obj>> map;
// insert -- done with single thread and before find()
map[123] = std::move( std::unique_ptr<Obj>(new Obj) );
// find -- run from multiple threads
auto search = map.find(123); // <=== (Q)
if (search != map.end())
{
search->second->doSome();
}
(问)
如果有多个线程使用 map.find(123) 运行 //find 部分,线程安全性如何?
map.find(123) 是否总能在每个线程 中找到obj?只要search->second没有分配给别人?
【问题讨论】:
-
注意:不要移动函数返回的任何东西(任何没有变量名的东西)。没用。
-
一般规则是调用标准库类的
const成员函数(如find)是可以的,只要不并发调用非const函数即可。
标签: c++ c++11 stl unique-ptr