-
-
[求助]线程同步
-
发表于:
2010-5-22 23:54
4656
-
问题是这样的:
我创建64个线程的时候同步是可以的,但当创建65个线程的时候就崩溃了。单独试了一下线程,可以创建65个以上的。是不是InterlockedExchange的限制?还是别的原因?谢谢啦。
// System.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <Windows.h>
DWORD increased = 0;
LONG atom_increase = 0;
UINT IncreaseThread(LPVOID lpVoid)
{
DWORD* ThreadID = (DWORD*)lpVoid;
if (ThreadID)
{
int count = 0;
while(count++<100)
{
while(::InterlockedExchange(&atom_increase, 1) == 1)
::Sleep(1);
cerr<<*ThreadID<<"\t"<<increased++<<endl;
::InterlockedExchange(&atom_increase, 0);
::Sleep(1);
}
cerr<<"thread "<<*ThreadID<<" quit"<<endl;
delete ThreadID;
return 0;
}
else
{
cout<<"invalid parameter!"<<endl;
return 1;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE handles[100];
for (int i = 0 ; i<
65; i++)
{
DWORD *Par = new DWORD;
*Par = i;
DWORD dwThreadID;
handles[i] = ::CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)IncreaseThread,
Par, 0, &dwThreadID);
if (handles[i] == INVALID_HANDLE_VALUE)
{
cout<<"create thread failed"<<i<<endl;
}
}
::WaitForMultipleObjects(
65, handles, TRUE, INFINITE);
cout<<"leave"<<endl;
return 0;
}
[课程]FART 脱壳王!加量不加价!FART作者讲授!