【问题标题】:Does tbb::concurrent_unordered_map::unsafe_erase invalidate any existing iterators?tbb::concurrent_unordered_map::unsafe_erase 是否会使任何现有的迭代器失效?
【发布时间】:2013-11-07 03:34:32
【问题描述】:

我看到tbb::concurrent_unordered_mapstd::unordered_map 非常接近,同时保证并发安全。我也知道unsafe_eraseinsert 等不是并发安全的。迭代器文档还指出,任何现有的迭代器对insertfind 等仍然有效。

问题是,除了被要求擦除的迭代器之外,unsafe_erase 是否会使任何其他迭代器失效?

std::unordered_mapstd::map 肯定有这种行为,但在任何地方的 concurrent_unordered_map 文档中都没有指定。

【问题讨论】:

    标签: c++ concurrency thread-safety hashmap tbb


    【解决方案1】:

    tbb::unsafe_erase 不会使其他迭代器无效。这是我们应该记录的属性。

    它不会使其他迭代器失效的原因是底层实现是split-ordered list,而迭代器只是指向该列表。

    【讨论】:

    • 感谢您的明确答复。我打算将它用于缓存,以及映射迭代器队列以确定最旧的条目过期。显然,如果擦除最旧的条目会使队列无效,我最终将不得不为每次擦除刷新队列或改用一个键。
    猜你喜欢
    • 2011-05-19
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    • 2011-01-04
    • 2011-04-22
    相关资源
    最近更新 更多