关于N个线程等待执行
来源:百度知道 编辑:UC知道 时间:2024/05/26 08:41:13
现在有20000个东西要处理
这些处理当然要用纯程处理
而一次执行创建几百万个线程是不实际的,
所以要分开执行,先创建10个线程;;等执行完了再创建10 线程,又执行。。。。如此到最后执行完毕
请高手指点吓,如何管理,实现这些线程之间的关系,
我想始终有10个线程在执行,哪个线程结束后自动再创建一个线程,保存有10个线程在执行(当要处理的大于10个线程时)
我把意思再明确一吓
有N个线程待执行,每次分成10个线程来运行,当然每个线程结束时间不确保一样,所以不能等10个线程都结束才创建下10个线程;;每个线程结束时(如果还有剩)就自动创建一个,至到所有完毕;;至于线程安全保护,什么方式最好(有代码演示合适的直接给分了),
还有更要命的事情,待执行的东西是从文件里面读出来的,且数量比较大,如果一起读完可能内存都不够,所以边读边执行还是读完再执行,我不先不提出来,先把我这个问题解决了
这些处理当然要用纯程处理
而一次执行创建几百万个线程是不实际的,
所以要分开执行,先创建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[])
{