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
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
线程同步在实际中并不要求死循环,
但在学习的时候最好用while(1),容易看出效果
你得出的结果是正确的,1个线程结束了,另一个线程会进来的
- C/C++ code
DWORD WINAPI ThreadProc(LPVOID lpParam){ while (1) { WaitForSingleObject(g_hMutex, INFINITE); // 1.. // 2.. ReleaseMutex(g_hMutex); } return 0; }