转载:http://blog.csdn.net/morewindows/article/details/7442333
程序描述:
主线程启动10个子线程并将表示子线程序号的变量地址作为参数传递给子线程。子线程接收参数 -> sleep(50) -> 全局变量++ -> sleep(0) -> 输出参数和全局变量。如果你写出来的程序是这个样子的,那么你就太naive了,因为线程不一定按照他创建的顺序去执行!所以前者输出10毫无疑问的,全局变量不一定按照1-10的顺序输出,因为线程的执行顺序是不确定的。
#include <iostream>
#include <stdlib.h>
#include <windows.h>
#include <process.h>
#include <cstdlib>
using namespace std;
const int NUM=10;
int global=0;
unsigned int __stdcall run(void* pm)
{
Sleep(50);
int id=*((int*)pm);
global++;
printf("This is Thread id:%d,global:%d\n",id,global);
Sleep(0);
}
int main(int argc, char *argv[])
{
HANDLE handle[NUM];
for(int i=0 ; i<NUM ; i++){
handle[i]=(HANDLE)_beginthreadex(NULL,0,run,(void*)(&i),0,NULL);
}
WaitForMultipleObjects(10,handle,TRUE,INFINITE);
system("pause");
return 0;
}
所以我们必须进行线程的同步和互斥