首先我们先来看一个程序,从这个程序来引出多线程的控制手段,怎么样使得每个线程相互是互斥的,下面这个程序大概就是创建10个线程,并输出线程的序号,但是因为没有控制手段导致序号输出的时候是混乱的,因为线程的执行时没有顺序的它是并行执行的所以如果变量不加以控制就会出现混乱的情况。程序使用codeblocks编译的。
#include <iostream> #include <stdio.h> #include <process.h> #include <windows.h> long g_nNum; unsigned int __stdcall Fun(void *pPM); const int thread_num = 10; int main() { g_nNum = 0; HANDLE handle[thread_num]; int i =0; while(i < thread_num) { handle[i] = (HANDLE)_beginthreadex(NULL,0,Fun,&i,0,NULL); i++; } WaitForMultipleObjects(thread_num,handle,TRUE,INFINITE); return 0; } unsigned int __stdcall Fun(void *pPM) { int nThreadNum = *(int*)pPM; Sleep(50); g_nNum++; Sleep(50); printf("线程编号%d 全局资源值%d\n",nThreadNum,g_nNum); return 0; }
原文地址:http://blog.csdn.net/djd1234567/article/details/46318765