多线程访问哈希表存储桶的锁数组

我有一个方案,在hashmap中,我对每个哈希映射存储桶使用一个锁,因此我定义了一个锁数组,如下所示:

pthread_mutex_t bktLocks[N]; // where N is number of bkt

从CPU缓存的角度出发,我被问到了什么问题?

我尝试在下面列出一个方案,但没有看到任何具体问题:(假设回写缓存策略)

  1. T1(thread1)要锁定bktLocks [0],因此首先将包括bktLock [0]的缓存块放入缓存中,因为同一缓存块中的bktLock [1]内存也放入了相同缓存中。

  2. T1修改bktLocks [0]为锁定状态,并将该缓存blk标记为脏

  3. T2尝试锁定bktLocks [1],它在高速缓存中,并且看到它未锁定,因此将其锁定,修改要锁定的内容,但blk仍然很脏并且不在高速缓存中,而不在主内存中

  4. 该缓存blk被驱逐,因此bktLocks [0]和bktLocks [1]进入主内存。

从上述情况来看,我什至认为它们都是锁,但它应该与CPU缓存中缓存的任何其他内存内容一样。想问一下,从CPU缓存POV中有什么我可能会错过的地方,在同一缓存块中的多个线程访问锁会引起关注吗?

ddm983916 回答:多线程访问哈希表存储桶的锁数组

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3040777.html

大家都在问