Mic*_*gan 5 c++ multithreading atomic
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];
Run Code Online (Sandbox Code Playgroud)
Linux上有各种可用的同步增量函数.有关此stackoverflow线程上的选项的相当好的讨论