能力值:
( LV4,RANK:50 )
|
-
-
2 楼
杯具了,居然没有人搭理我,难道这个话题是太小儿科了?
其实我还是认为多线程开发是非常难的,当代码量到了一定程度,复杂度也大大增加,出了问题也很难定位,缺陷再现性也差。
我做了多年的软件维护工作,解决问题无数,绝大多数和多线程相关,呵呵!
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
期待下文
多线程同步问题理论的东东看的太多了,希望楼主写一些实际中应用的东东
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
要是个多线程的密码保护问题就好了
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
楼主一遍慢慢说,一遍等邀请码啊,只要讲的好,相信斑竹一定会给邀请码的
|
能力值:
( LV4,RANK:50 )
|
-
-
6 楼
下面放一段加锁解锁代码,欢迎指出不足,呵呵:
CGuard::CGuard(HANDLE hMutex,BOOL bWaitMsg,DWORD dwTimeOut)
{
m_hMutex = hMutex;
BOOL bLoged = FALSE;
if (NULL != m_hMutex)
{
if (bWaitMsg)
{
for (;;)
{
DWORD dwResult = ::MsgWaitForMultipleObjects(1, &m_hMutex, FALSE, dwTimeOunt, QS_SENDMESSAGE);
if (WAIT_TIMEOUT == dwResult)
{
if (!bLoged)
{
PrintStackTrace();
bLoged = TRUE;
}
continue;
}
if (WAIT_OBJECT_0 == dwResult)
{
break;
}
else
{
MSG msg;
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
dwResult = ::MsgWaitForMultipleObjects(1, &m_hMutex, FALSE, 0, QS_SENDMESSAGE);
if (WAIT_OBJECT_0 == dwResult)
{
return;
}
}
}
}
}
else
{
for (;;)
{
DWORD dwResult = WaitForSingleObject(m_hMutex,dwTimeOunt);
if (WAIT_TIMEOUT == dwResult)
{
if (!bLoged)
{
PrintStackTrace();
bLoged = TRUE;
}
}
else if (WAIT_OBJECT_0 == dwResult)
{
return;
}
}
}
}
}
CGuard::~CGuard()
{
if (NULL != m_hMutex)
{
ReleaseMutex(m_hMutex);
}
}
void CGuard::PrintStackTrace()
{
DWORD dwAddr = 0;
DWORD dwChildEbp = 0;
_asm call $+5;
_asm pop eax;
_asm mov dwAddr,eax;
_asm mov dwChildEbp,ebp;
DWORD dwRetAddr = *(DWORD*)(dwChildEbp+4);
CString strMsg = "Addr\t\tChildEbp\t\tRetAddr\r\n"
"===============================\r\n";
try
{
while (TRUE)//dwRetAddr != 0)
{
dwAddr = dwRetAddr;
dwChildEbp = *(DWORD*)dwChildEbp;
dwRetAddr = *(DWORD*)(dwChildEbp+4);
CString strTemp;
strTemp.Format("0x%08X\t0x%08X\t0x%08X\r\n",dwAddr,dwChildEbp,dwRetAddr);
strMsg += strTemp;
}
}
catch (...)
{
WriteToLogFile(strMsg);
}
}
|
能力值:
( LV4,RANK:50 )
|
-
-
7 楼
算了,有始有终把,一般死锁检测都是分析各个线程的函数调用栈
细心的朋友可能从上面的加锁代码中已经发现了方法,就是等待锁超时时将函数调用栈Log下来分析
斑竹好小气,我写了这么多字都要不来一个邀请码,还好我的一个朋友送了一个,呵呵!
|
能力值:
( LV13,RANK:350 )
|
-
-
8 楼
你写的文章都很不错的 学习了
最近有些忙 所以现在我一般是10天发一次 这次因为有事耽搁了两三天
给各位带来的不便请见谅
该有总是会有的~
|
能力值:
( LV4,RANK:50 )
|
-
-
9 楼
版主,客气了,呵呵!
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
多线程的确是很麻烦
|
|
|