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