//本内容只在多线程操作下具有意义
1 循环锁
实现循环锁:
可以用InterlockedExChange来实现循环锁的功能,所谓循环锁,就是在线程1中如果要对变量进行操作,要先查看这个变量(或资源)有没有被其它线程用到,如果是,则一直循环,则到其它线程放弃对该变量(或资源)的控制。如果否,直接可以对该变量(或资源)进行操作。
如:
(使用srwlock也是可以实现的,可读性更强。不用其他互斥量,只为提升效率)
BOOL g_fResourceInUse = FALSE;
void Func1()
{
//Wait to access the resource. 等待资源
while(InterlockedExchange(&g_fResourceInUse, TRUE) == TRUE)
Sleep(0);
//Access the resource. //获取资源
...//
//We no longer need to access the resource.
InterlockedExchange(&g_fResourceInUse, FALSE); //释放资源
}
其它线程如要使用资源也如上代码所示。
OK,w h i l e循环是循环运行的(假使本线程是ThreadA),它将g _ f R e s o u r c e I n U s e中的值改为T R U E,并查看它的前一个值,以了解它是否是T R U E。如果是,则表示已经有线程(假使为ThreadB)使用了,它就要等待,直到ThreadB线程执行InterLockedExchange(&g_fResourceInUse, FALSE); 操作,则ThreadA它就可以退出while循环,然后获取资源,并且,它对g_fResourceInUse设置为TURE,其它线程(假使ThreadC)如要使用,则将如刚才ThreadA般等待。直到ThreadA的InterlockedExchange(&g_fResourceInUse, FALSE);执行完为止。
2 原子操作数值
volatile long g_sum=0;
InterlockedExchangeAdd(&g_sum,10);
返回原始值,g_sum值已经被修改