false 与堆内存共享的情况吗?

Kai*_*kha 0 c++ multithreading openmp multiprocessing false-sharing

据我所知,当多个线程尝试读取位于同一缓存行中的小块且相邻的数据时,就会发生错误共享:

#include <omp.h>
#define NUM_THREADS 4

int main() {
    int arr[NUM_THREADS];

#   pragma omp parallel num_threads(NUM_THREADS)
    {
        const int id = omp_get_thread_num();
        arr[id] // doing something with it
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我动态创建数组怎么办?

int *arr = new int[NUM_THREADS];
Run Code Online (Sandbox Code Playgroud)

如果我的数组位于堆上,是否会发生错误共享?在这种情况下是否有一些缓存行限制?

Gos*_*low 11

记忆就是记忆。对于CPU来说,栈上的数组与堆上的数组完全相同。所以任何虚假共享的问题都是一样的。