gpt4 book ai didi

c++ - 同步访问分配的内存

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:49:04 24 4
gpt4 key购买 nike

有没有办法同步访问已分配内存中的每个元素。例如,如果我使用以下代码分配内存

int* counters = new int[10];

有没有办法分别同步修改每个计数器(能够同时修改计数器[0]、计数器[1]...计数器[9]),这样修改,比方说,计数器[ 0] 不会阻塞计数器 [9],直到释放锁以更新计数器 [9] 和其他计数器,而线程正在更新特定计数器计数器 [0]?这些计数器不相关并且不依赖于与其他计数器的任何共享数据?

最佳答案

您需要查看 <atomic>如果您想避免使用互斥体进行同步,则 header 设施。

假设您的“计数器”数组只是一种跟踪一定数量计数的方法,可以使用 std::atomic<int> counters[10] 来完成。每个计数器都可以通过调用 counters[i].fetch_add(1, std::memory_order_relaxed) 以线程安全的方式递增.

正如用户 Barmar 指出的那样,std::atomic<int>也可以在内部使用互斥体。这是依赖于实现的,可以通过调用 is_lock_free() 来查询。 std::atomic<int> 的成员函数实例。在我的实现中,std::atomic<int>实例是无锁的。

关于c++ - 同步访问分配的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32510227/

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