65,206
社区成员
发帖
与我相关
我的任务
分享
[/quote]
我不知道你怎么想的,如果真的按照你所说的,真的不如用单线程。在一个循环体里,意味着 每段线程处理的资源 都是相关的,一个线程访问一个资源之前,必须检查这个资源有没有被使用,这样的效率低到令人发指。
除非你开始就把 资源分割 成10段,然后用10个线程分别处理。否则,没有任何意义。
如果你的资源是动态进来的,那也用不到for循环体。
[/quote]
用一个volatile的全局变量控制。初始设置为0,每个线程加锁后读取这个变量,然后+10,解锁。判断是否超过200,超过的话线程while循环结束。线程内循环处理10次任务。


#include <Windows.h>
#include <iostream>
using namespace std;
DWORD WINAPI Thread1(LPVOID lpParmeter);
DWORD WINAPI Thread2(LPVOID lpParmeter);
int main()
{
HANDLE hThread1 ;
HANDLE hThread2 ;
hThread1 = CreateThread(NULL, 0, Thread1, NULL, 0, NULL);
hThread2 = CreateThread(NULL, 0, Thread2, NULL, 0, NULL);
HANDLE h[2]={hThread1,hThread2};
WaitForMultipleObjects(2,h,true, INFINITE);//等待所有线程完成后,退出
CloseHandle(hThread1);
CloseHandle(hThread2);
system("PAUSE");
return 0;
}
DWORD WINAPI Thread1(LPVOID lpParmeter)
{
//1到100的处理过程
for each 1 to 100
deal(...);
return 0;
}
DWORD WINAPI Thread2(LPVOID lpParameter)//thread data
{
//100到200的处理过程
for each 100 to 200
deal(...);
return 0;
}
处理过程自己写
把数据分成10段,每一小段都for自己内部的数据。。