Posted on 2009-04-05 17:25
S.l.e!ep.¢% 閱讀(1119)
評論(0) 編輯 收藏 引用 所屬分類:
WinDbg
內存崩潰的BUG 之 另一case 1
查了一下,原來是引用計數里面的? m_count++,? 用得有問題!
#include <iostream>
using namespace std;
#include <windows.h>
#include <process.h>
DWORD g_value = 0;
#define NUMBER_COUNT 2000
void __cdecl threadfun(void* pVoid)
{
?for (int i = 0; i <= NUMBER_COUNT; i++ )
?{
??// g_value++;
??// g_value--;
??InterlockedIncrement((long*)&g_value);
???? InterlockedDecrement((long*)&g_value);
?}
}
int main()
{
?int i = 0;
?g_value = 1;
?HANDLE hArray[NUMBER_COUNT] = {INVALID_HANDLE_VALUE};
?for ( i = 0; i <= NUMBER_COUNT; i++ )
?{
??hArray[i] = (HANDLE)_beginthread(threadfun, 0, (void*)i);
?}
?for ( i = 0; i <= NUMBER_COUNT; i++ )
?{
??DWORD dwRet = 0;
??????? DWORD dwExitCode = 0;
??????? if( TRUE == ::GetExitCodeThread(hArray[i], &dwExitCode) )
??????? {
??????????? if( STILL_ACTIVE == dwExitCode )???????????
??????????????? dwRet = ::WaitForSingleObject(hArray[i], INFINITE); // INFINITE
??????? }
?}
?cout << g_value << endl;
?return 0;
}