首页 > 代码库 > map find 是线程安全的吗

map find 是线程安全的吗

测试环境gcc4.8.2

??

iterator find ( const key_type& k );

const_iterator find ( const key_type& k ) const;

??

Unordered_map有两个对应的find函数 我推断第二个是安全的,第一个经过实测不是线程安全

??

auto iter = _map.find(key)

在openmp多线程环境下出core,感谢glog的错误信息输出

??

***?Aborted?at?1412933723?(unix?time)?try?"date?-d?@1412933723"?if?you?are?using?GNU?date?***

PC:?@???????????0x8d1d65?std::equal_to<>::operator()()

***?SIGSEGV?(@0x8)?received?by?PID?3216?(TID?0x7f7c3902d700)?from?PID?8;?stack?trace:?***

????@?????0x7f7c4b769150?(unknown)

????@???????????0x8d1d65?std::equal_to<>::operator()()

????@???????????0x8e231b?std::__detail::_Equal_helper<>::_S_equals()

????@???????????0x8dbbb0?std::__detail::_Hashtable_base<>::_M_equals()

????@???????????0x8d1e63?std::_Hashtable<>::_M_find_before_node()

????@???????????0x8c432e?std::_Hashtable<>::_M_find_node()

????@???????????0x8b2bca?std::_Hashtable<>::find()

????@???????????0x89adcd?std::unordered_map<>::find()

????@???????????0x87af21?gezi::LruMap<>::find()

????@???????????0x85c6ab?gezi::TimerMap<>::count()

????@???????????0x7ee705?run()

????@???????????0x7f1893?_Z3runv._omp_fn.3

????@?????0x7f7c4a65641a?gomp_thread_start

????@?????0x7f7c4b7611c1?start_thread

????@?????0x7f7c49b6c0ad?__clone

Segmentation?fault

??

??

由于我可能需要修改iter->second,因此不能改用const_iterator

增加

iterator iter;

#pragma omp critical

iter = _map.find(key);

??

程序运行正常了

map find 是线程安全的吗