当前位置: 代码迷 >> 多核软件开发 >> 线程同步,该怎么处理
  详细解决方案

线程同步,该怎么处理

热度:3767   发布时间:2013-02-26 00:00:00.0
线程同步
dll中有函数A;
写个dll的客户测试程序,程序中开了2个线程 T1,T2,2个线程都调用了A;
A中控制同步:

*** A()
{
  WaitForSingleObject(g_mutex,INFINITE);
  ...1;
  ...2;
  //ReleaseMutex(g_mutex); //注意屏蔽了该句
}
怎么2个线程都能执行1,2两行代码阿,不是已经锁住了吗.

------解决方案--------------------------------------------------------
看看你的g_mutex是如何创建的
------解决方案--------------------------------------------------------
判断一下WaitForSingleObject的返回值
------解决方案--------------------------------------------------------
怀疑你的g_mutex是一直有信号的,创建函数的参数看看
------解决方案--------------------------------------------------------
怎么不用 EnterCriticalSection LeaveCriticalSection
------解决方案--------------------------------------------------------
探讨

看看你的g_mutex是如何创建的

------解决方案--------------------------------------------------------
线程同步在实际中并不要求死循环,

但在学习的时候最好用while(1),容易看出效果

你得出的结果是正确的,1个线程结束了,另一个线程会进来的
C/C++ code
DWORD WINAPI ThreadProc(LPVOID lpParam){     while (1)    {        WaitForSingleObject(g_hMutex, INFINITE);        // 1..        // 2..        ReleaseMutex(g_hMutex);    }    return 0;    }
  相关解决方案