gpt4 book ai didi

c++ - 我可以使以下代码无锁/原子锁吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:16:33 25 4
gpt4 key购买 nike

int val = memLoc[index++];

或者更好

int val = memLoc[index++ & 0xFF];

尝试从共享环形缓冲区中进行线程安全读取,每次调用都会在其中获取下一个值 - 我希望它尽可能无锁,因为它发生了 TON。不允许使用 Boost/C++ 11 :(

最佳答案

此处唯一需要同步的操作是index 值的递增。由于这只是一个数值,因此可以通过原子增量在不使用锁的情况下完成。您列出的其余操作只是共享位置的读取,不需要同步。

在 Win32 上同步增量是通过 InterlockedIncrement 函数完成的

int oldValue = InterlockedIncrement(&index);
int val = memLoc[oldValue & 0xFF];

Linux 上有各种可用的同步增量函数。关于这个 stackoverflow 线程上的选项有相当好的讨论

关于c++ - 我可以使以下代码无锁/原子锁吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10142765/

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