函数的机器码只有一份。如果变量时函数内的局部变量,几个线程调用就有几份,如果是全局变量就只有一份,如果你不加锁,多个线程是可以同时读写的,那么读写出来的就是垃圾了,要实现线程安全,可以
1 访问变量的时候上锁。例:
void testFunc() {
。。。
{
AutoLock lock; // AutoLock 实在构造函数中 EnterCriticalSection 上锁, 在析构函数中 LeaveCriticalSection 解锁。
访问变量;
}
。。。
}
2 用原子 *** 作API,win上是 好像是 InterlockedExchange ,就是 Interlockedxxxx 系列的。
不过这种裸奔方式的API最好少用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)