读书人

线程同步,该怎么处理

发布时间: 2012-03-20 14:01:10 作者: rapoo

线程同步
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;    } 

读书人网 >软件开发

热点推荐