我正在使用 boost:thread 库将单线程程序更改为多线程程序。该程序使用 unordered_map 作为 hasp_map 进行查找。我的问题是..
某一时刻,许多线程将进行写入,而另一时刻,许多线程将进行读取,但不会同时进行读取和写入,即,要么所有线程都在读取,要么全部线程都在写入。这将是线程安全的以及为此设计的容器吗?如果是的话,它真的会并发并提高性能吗?我需要使用某种锁定机制吗?
我在某处读到 C++ 标准说行为将是未定义的,但这就是全部吗?
更新:我也在考虑英特尔并发哈希映射。这会是一个好的选择吗?
STL 容器的设计保证您能够:
A.多线程同时读取
or
B. 一个线程同时写入
多线程写入不是上述条件之一,也是不允许的。因此,多线程写入将产生数据竞争,这是未定义的行为。
您可以使用互斥体来解决此问题。共享互斥体(与共享锁结合)将特别有用,因为该类型的互斥体允许多个并发读取器。
http://eel.is/c++draft/res.on.data.races#3 http://eel.is/c++draft/res.on.data.races#3是标准的一部分,保证在不同线程上同时使用 const 函数的能力。http://eel.is/c++draft/container.requirements.dataraces http://eel.is/c++draft/container.requirements.dataraces指定一些在不同线程上安全的附加非常量操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)