gpt4 book ai didi

c++ - 创建一个线程安全的标准映射

转载 作者:IT老高 更新时间:2023-10-28 21:38:48 26 4
gpt4 key购买 nike

在我当前的场景中,速度至关重要,我有一张只能由多个线程读取的 map ,而且效果很好。现在出现了一个要求,可能需要在其他线程读取映射时偶尔写入静态映射。我相信这会改变游戏规则,因为我需要锁定我的 map 以确保线程安全。这会带来一个问题,因为我有多个线程 10-12 线程将读取 map 。如果一张 map 在 map 上锁定(因为它被读取),我相信锁定是必要的,因为可能会将某些内容写入 map 。无论如何,正如我之前所说,如果一个 map 正在读取,那么其他 map 将不会像之前那样拥有对 map 的并行读取访问权限。有什么办法可以规避这个问题吗?

最佳答案

您可以使用 shared_mutex在您的 map 旁边获取共享唯一访问权。通常,写入操作需要唯一访问权限,而读取操作需要共享访问权限。

只要没有线程持有唯一访问权限,任意数量的线程都可以获得共享访问权限。如果一个线程尝试获取唯一访问权限,它会一直等待,直到所有共享访问权限都被释放。

标准库和 Boost 提供 shared_lock<T>unique_lock<T>用于范围有限的收购 shared_mutex .

注意有些人声称 shared_mutex表现不佳,尽管我没有看到任何证据或强有力的分析来支持这些说法。如果对您很重要,可能值得研究。

关于c++ - 创建一个线程安全的标准映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19143228/

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