多线程 全局变量 加锁 作用范围

2025-04-03 18:07:32
推荐回答(4个)
回答1:

InitializeCriticalSection( & cs);这句不能放在函数内,整个程序内,调用一次就可以了,如放在main函数的开头。
因为每次进入函数时,这句代码就会初始化一个临界区,;放在函数内,会导致创建了很多临界区,所以无法起到互斥的变量。
CRITICAL_SECTION cs; 这只是定义了一个变量,并没有形成临界区。

回答2:

如果所有线程都只读取该变量的话不必加锁,因为仅读取不存在破坏数据的风险,如果有线程写该变量的话不管读取还是写入都要加锁的。 windowsAPI提供了一种Sim读写锁,允许所有读线程在同一时刻访问该资源,而写线...

回答3:

代码如下:
public static object locker = new object();//添加一个对象作为锁
就是在有修改的时候加上lock
lock (locker)//锁
{
/*添加过程*/
dictionary.Add("....", DateTime.Now);
}

回答4:

我的理解是每一个线程都有一个独立的对象就不存在线程安全问题,也没有了加锁的必要