我可以将以下代码锁定为free/atomic吗?

Mic*_*gan 5 c++ multithreading atomic

int val = memLoc[index++];

还是更好

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

尝试从共享环缓冲区执行线程安全读取,其中每个调用获得下一个值 - 并且我希望它可以锁定,如果它发生了TON那么可能.没有Boost/C++ 11允许:(

Jar*_*Par 7

这里唯一需要同步的操作是index值的增量.由于这只是一个数值,因此无需通过原子增量使用锁即可完成.您列出的其余操作只是读取共享位置而不需要同步.

在Win32上使增量同步完成InterlockedIncrement功能

int oldValue = InterlockedIncrement(&index);
int val = memLoc[oldValue & 0xFF];
Run Code Online (Sandbox Code Playgroud)

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

  • 在C++ 11中,有一个`std :: atomic_fetch_add`应该可以解决问题. (2认同)