多个C++线程如何在类方法上执行

Pau*_*mer 2 c++ multithreading

假设我们有一个c ++类,如:

class MyClass
{
   void processArray( <an array of 255 integers> )
   {
     int i ;
     for (i=0;i<255;i++)
     {
        // do something with values in the array
     }
   }
}
Run Code Online (Sandbox Code Playgroud)

和类的一个实例如:

MyClass myInstance ;
Run Code Online (Sandbox Code Playgroud)

和2个线程调用该实例的processArray方法(取决于系统如何执行线程,可能是完全不规则的顺序).该范围内没有使用互斥锁,因此两个线程都可以进入.

我的问题是我发生了什么?每个线程范围是否拥有它自己的"i",或者每个进入线程都会在for循环中修改i,导致i一直在奇怪地改变.

Ada*_*eld 15

i在堆栈上分配.由于每个线程都有自己独立的堆栈,因此每个线程都有自己的副本i.

  • 从技术上讲,它被称为堆栈变量(因为它的范围).寄存器只是一个不相关的实现细节. (3认同)