关于N个线程等待执行

来源:百度知道 编辑:UC知道 时间:2024/05/26 08:41:13
现在有20000个东西要处理
这些处理当然要用纯程处理
而一次执行创建几百万个线程是不实际的,
所以要分开执行,先创建10个线程;;等执行完了再创建10 线程,又执行。。。。如此到最后执行完毕

请高手指点吓,如何管理,实现这些线程之间的关系,

我想始终有10个线程在执行,哪个线程结束后自动再创建一个线程,保存有10个线程在执行(当要处理的大于10个线程时)
我把意思再明确一吓
有N个线程待执行,每次分成10个线程来运行,当然每个线程结束时间不确保一样,所以不能等10个线程都结束才创建下10个线程;;每个线程结束时(如果还有剩)就自动创建一个,至到所有完毕;;至于线程安全保护,什么方式最好(有代码演示合适的直接给分了),
还有更要命的事情,待执行的东西是从文件里面读出来的,且数量比较大,如果一起读完可能内存都不够,所以边读边执行还是读完再执行,我不先不提出来,先把我这个问题解决了

#include "windows.h"
#include "iostream.h"
DWORD ThreadId[10];
HANDLE Thread[10];
int Operand=0;
int suffix;
int i=0;
CRITICAL_SECTION g_cs;
DWORD WINAPI ThreadProc(
LPVOID lpParameter
);
void CreateTh(DWORD suffix)

{

::CloseHandle(Thread[suffix]);
Thread[suffix]=CreateThread(NULL,0,ThreadProc,&suffix,0,&ThreadId[suffix]);

}

DWORD WINAPI ThreadProc(
LPVOID lpParameter
)

{
::EnterCriticalSection(&g_cs);

if(Operand>=1000)

return 0;

suffix=*(int*)lpParameter;

i=0;

while(i<100)

{

Operand++;

i++;

cout<<Operand<<endl;

::Sleep(100);

}

::LeaveCriticalSection(&g_cs);
CreateTh(suffix);

return 0;

}

int main(int argc, char* argv[])
{