【发布时间】:2010-03-01 16:28:59
【问题描述】:
我正在寻找某种关联容器,它提供安全的并发读写访问,前提是您永远不会同时读写 same 元素。
基本上我有这个设置:
线程 1: 创建 A,将 A 写入容器,通过网络发送 A。
线程2:接收对A的响应,从容器中读取A,做一些处理。
我可以保证我们只写一次 A,尽管我们可能会收到多个对 A 的响应,这些响应将被串行处理。这也保证了我们永远不会同时读取和写入 A,因为我们只有在发送 A 之后才能收到对 A 的响应。
所以基本上我正在寻找一个容器,其中写入元素不会与任何其他元素混淆。例如,std::map(或任何其他基于树的实现)不满足此条件,因为它的底层实现是红黑树,因此任何给定的写入都可能重新平衡树并破坏任何并发的读取操作。
我认为 std::hash_map 或 boost::unordered_set 可能适用于此,只是基于我假设普通哈希表实现将满足我的标准,但我并不积极,我找不到任何文档可以告诉我。有其他人尝试过类似地使用这些吗?
【问题讨论】:
标签: c++ concurrency hashmap nonblocking