gpt4 book ai didi

c++ - 细粒度锁定

转载 作者:IT王子 更新时间:2023-10-29 01:10:27 28 4
gpt4 key购买 nike

假设我们有一个大数组和许多线程对该数组中的具体索引进行操作。两个线程不能同时对一个索引进行操作,一个应该等到另一个完成。还有一个蹩脚的问题:如何在 Linux/C/C++ 中对数组的每个索引实现 test-and-set 锁定?

最佳答案

对于细粒度锁定,使用一组读/写锁(正如 Carey Hickling 建议的那样)。散列索引值并通过位掩码(或使用模数)对其进行过滤以选择要使用的锁。

这有效地将索引拆分为 N 个存储桶,其中 N 是您创建的锁的数量。为锁定数选择 2 的幂,以便轻松进行位掩码(掩码 = N - 1)。这种情况下的唯一缺点是您不仅锁定了特定的索引,而且锁定了每个索引,这些索引在散列时与同一个锁指针对齐。

也就是说,您创建的锁越多,锁定的粒度就越细(16 可能是一个很好的起点)。读取锁也与 rw_locks 共享,因此您只需担心在写入期间等待锁。

关于c++ - 细粒度锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9026718/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com