Jar*_*edC 5 c++ multithreading memcpy
我最近提出了一个关于使用volatile的问题,并被指示阅读英特尔和其他人讨论内存障碍及其用途的一些非常有用的文章.看完这些文章后,我变得非常偏执.
我有一台64位机器.从多个线程记忆到相邻的,非重叠的内存区域是否安全?例如,假设我有一个缓冲区:
char buff[10];
Run Code Online (Sandbox Code Playgroud)
一个线程是否总是安全地记忆到前5个字节,而第二个线程复制到最后5个字节?
我的直觉反应(和一些简单的测试)表明这是完全安全的,但我无法在任何可以完全说服我的文件中找到文档.
安全,是的.高性能,至少在这个有限的例子中.请记住,一个缓存行不能同时位于两个核心中.当核心B写入缓冲区时,您将强制核心A等待,然后在传输内存时等待,然后写入它.多核内存副本的大小应该非常大,以避免这种影响.