C++线程安全——读图

标签 c++ multithreading thread-safety

我正在开发一个需要 std::map 的程序特别是像这样的 map<string,map<string,int>> - 它意味着类似于银行更改率 - 第一个字符串是原始货币,第二个 map 中的那个是所需的货币,int 是他们的汇率。整个 map 将只读。我还需要互斥量吗?我对整个线程安全有点困惑,因为这是我的第一个更大的多线程程序。

最佳答案

如果您谈论的是标准 std::map 并且没有线程写入它,则不需要同步。没有写入的并发读取没问题。

但是,如果至少有一个线程在映射上执行写操作,您确实需要某种保护,例如互斥量。

请注意 std::map::operator[] 算作写入,因此请使用 std::map::at(或 std::map::find 如果键可能不存在于 map 中)。您可以通过 const map& 仅引用共享映射,让编译器保护您免受意外写入。


已在 OP 中明确说明是这种情况。为了完整起见:请注意其他类可能有 mutable 成员。对于那些,即使通过 const& 访问也可能会引入竞争。如果有疑问,请查看文档或使用其他东西进行并行编程。

关于C++线程安全——读图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40874027/

相关文章:

c++ - 带有 Qt 的动态 QGridLayout(适应小部件大小)

unix - POSIX 线程 : are pthreads_cond_wait() and others systemcalls?

python - 我可以将什么附加到 Pylons 中的 pylons.request 上?

java - 如果我们通过一个线程添加并通过另一个线程删除,我们是否需要同步?

java - 嵌套锁上的非法状态异常

c - OpenMP,并行写入不同的数组元素

c++ -::std::mutex 在 std 之前使用时是什么意思

c++ - 关于cpp中的自增操作

c++ - pthread c++ 的性能提升可忽略不计

java - 多线程同步问题