gpt4 book ai didi

c++ - 我是否需要使用互斥锁来保护从不同线程对互斥锁数组的访问?

转载 作者:行者123 更新时间:2023-12-02 09:55:25 24 4
gpt4 key购买 nike

假设我有一堆文件,每个文件都有一个互斥量的数组。现在,我有不同的线程从随机文件中读取数据,但是首先它们需要从数组中获取锁。在获取特定文件的互斥锁之前,我是否应该对整个数组必须具有锁定?

最佳答案

不,但是您要做的是将这些互斥锁所驻留的内存带入每个线程,因为您故意关闭了互斥锁。

使其他线程对内存的访问远离其他单独线程处理的内容。

将每个线程与紧密打包(但对齐)的数据相关联,并尽可能减少cache lines的数量。一个互斥锁和一个数据集-距离其他工作线程需要访问的地方不远。

您可以通过使用自制的 std::hardware_constructive_interference_size (例如... 64)(受欢迎,不科学但很常见)来轻松评估效果。

分离数据的方式是,其他线程无需触摸这64个字节(或您想出的任何数字)内的数据。

这是“不开 Jest 吗?”经验。

数字64几乎是任意的。我可以使用该常量编译程序-但不会将其转换为对其他目标平台有意义的内容-它将保持64。这是一个最佳猜测。

Understanding std::hardware_destructive_interference_size and std::hardware_constructive_interference_size

关于c++ - 我是否需要使用互斥锁来保护从不同线程对互斥锁数组的访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60556119/

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