顯示廣告
隱藏 ✕
看板 uefacool
作者 uefangsmith (唉呦!不錯哦~)
標題 [Wdri] 用户方式中线程的同步
時間 2013年06月04日 Tue. PM 05:53:41


用户方式中线程的同步
http://www.cnblogs.com/shipfi/archive/2005/08/31/227228.html

实现循环锁:

可以用InterlockedExChange来实现循环锁的功能,所谓循环锁,就是在线程1中如果要对变量进行操作,要先查看这个变量(或资源)有没有被其它线程用到,如果是,则一直循环,则到其它线程放弃对该变量(或资源)的控制。如果否,直接可以对该变量(或资源)进行操作。

如:

 

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);执行完为止。



--
※ 作者: uefangsmith 時間: 2013-06-04 17:53:41
※ 編輯: uefangsmith 時間: 2014-08-21 14:28:58
※ 看板: uefacool 文章推薦值: 0 目前人氣: 0 累積人氣: 48 
guest
x)推文 r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇