欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

关于rse地图hore

更新时间: 2014-01-05 02:40:18 责任编辑: Author_N1

 

关于RSemaphore,高手请进
一般介绍是,操作都是先wait, 再signal,但是如果先signal再wait,后果是怎样,找不到结论,一直怀疑这里有问题。自己做实验,发觉也没有问题。
我开启了两个线程,一个计时器,以下就是我的关键代码:
TInt CTestMultiThreadAppUi::ThreadProc1(void* pParam)
{
    CTestMultiThreadAppUi* pApp = (CTestMultiThreadAppUi*)pParam;
    while(!pApp->iStop)
    {
        if(pApp->iLocked)
        {
            pApp->iLocked = false;
            pApp->m_cSemaphore.Wait();
        }
        
        User::After(10000);
    }
    
    return 0;
}

TInt CTestMultiThreadAppUi::ThreadProc2(void* pParam)
{
    CTestMultiThreadAppUi* pApp = (CTestMultiThreadAppUi*)pParam;
    while(!pApp->iStop)
    {
        if(pApp->iUnLocked)
        {
            pApp->iUnLocked = false;
            pApp->m_cSemaphore.Signal();
        }
        
        User::After(10000);
    }
    
    return 0;
}

TInt CTestMultiThreadAppUi::TimerLoop(void* pParam)
{
    CTestMultiThreadAppUi* pApp = (CTestMultiThreadAppUi*)pParam;
    pApp->iCount ++;
    
    if(pApp->iCount == 1000)
        pApp->iLocked = true;
    
    if(pApp->iCount == 100)
        pApp->iUnLocked = true;
    return 0;
}

--参考方法--
RSemaphore 创建后的初始值决定的,如果值少于等于0时,线程阻塞,初始值为1 .
那么先wait, 再signal,调用WAIT的线程阻塞,反过来先signal再wait,协同工作的线程都不会阻塞,
可能出现冲突
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:40:18
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/12906/
本文WWW.DOC100.NET DOC100.NET版权所有。