C++局部变量和线程(不是thread_local)

mta*_*all 6 c++ parallel-processing multithreading local-variables thread-safety

用于本地数组和与线程交互的C++ 98和C++ 11内存模型是什么?

不是指C++ 11 thread_local关键字,它与全局变量和静态变量有关.

相反,我想知道在编译时分配的数组的线程的保证行为是什么.编译时我的意思是"int array [100]",这与使用new []关键字的分配不同.我不是指静态变量.

例如,假设我有以下结构/类:

struct xyz { int array[100]; };
Run Code Online (Sandbox Code Playgroud)

以及以下功能:

void fn(int x) {
  xyz dog;
  for(int i=0; i<100; ++i)  { dog.array[i] = x; }
  // do something else with dog.array, eg. call another function with dog as parameter
  }
Run Code Online (Sandbox Code Playgroud)

从多个线程调用fn()是否安全?似乎C++内存模型是:所有本地非静态变量和数组都在堆栈上分配,并且每个线程都有自己的堆栈.这是真的吗(即,这是标准的正式部分)吗?

Obe*_*ron 8

这些变量在堆栈上分配,并且由于每个线程都有自己的堆栈,因此使用本地数组是完全安全的.它们与例如本地int的没有什么不同.