重新哈希时锁定哈希图

时间:2019-10-27 02:34:26

标签: c++ multithreading c++11 hashmap mutex

我正在尝试创建一个线程安全的哈希映射。我为哈希图中的每个存储桶都有一个互斥量向量,以支持哈希图中每个条目的读写器锁。

但是,当我想重新哈希哈希图时,我想锁定整个图,以便在重新哈希期间不会发生读/写。

我认为我需要一个额外的互斥体,但是我的Gets / Puts方法是否也需要获取此互斥体?我该如何仅在进行重新哈希处理时阻止其他线程进行读/写操作,而仅在进行写和读取操作时才相互阻止呢?

这是我当前的哈希表类的外观:

vpcmpeqb  k0, zmm0, [rsp]

1 个答案:

答案 0 :(得分:1)

这太过思索了。保护整个容器的单个互斥锁就足够了。但是,如果您坚持要实施这种复杂的设计:

  1. 为全局容器互斥使用std::shared_mutex
  2. 单个吸气器/推子将需要在全局互斥锁上获得共享锁,然后再锁定其单个哈希桶。
  3. Rehash获得排他锁,该锁将阻止所有吸气剂/推子。