Eve*_*ard 16 c++ multithreading
我知道这个问题可能看似重复,但我没有得到解答其他问题的答案.
我的情况 - 来自Express edition studio + Windows sdk的Visual C++编译器2005.
只是一个问题,如果这样的功能:
void myFunc()
{
int i=0;
i++;
}
Run Code Online (Sandbox Code Playgroud)
从多个线程调用是否安全?
是的,它似乎是,但编译器不会让i变量在内存中是静态的吗?那么这可能会导致两个线程在一个内存区域上共同作用?或者我的恐惧只是一些傻瓜的恐惧?所有局部变量都是在调用函数时创建的?
Pet*_*der 23
是的,它是线程安全的.
i在内存中不会是静态的,因为它不是静态的.另一方面,如果你写了:
void myFunc()
{
static int i = 0;
i++;
}
Run Code Online (Sandbox Code Playgroud)
然后它不是线程安全的(好吧,如果i实际使用的话).
局部变量都位于堆栈上(或完全位于寄存器中).每个线程都有自己的堆栈,并且寄存器的处理方式使它们基本上是每个线程的本地(参见上下文切换),所以你没事.
所有局部变量都是在调用函数时创建的?
局部变量的典型实现是在堆栈上创建它们,并且每个线程都有自己的堆栈,因此本地变量很好.
您需要注意的唯一时间是变量是复杂类型,因为它可能在其中具有对静态数据或全局数据进行操作的逻辑.当然,大多数优秀的软件都会避免写这样的课程.
| 归档时间: |
|
| 查看次数: |
5788 次 |
| 最近记录: |