秒杀多线程第四篇 一个经典的多线程同步问题 .

参考博客:http://blog.csdn.net/morewindows/article/details/7442333

主线程启动10个子线程并将表示子线程序号的变量地址作为参数传递给子线程。子线程接收参数 -> sleep(50) -> 全局变量++ -> sleep(0) -> 输出参数和全局变量。

 1 #include <stdio.h>
 2 #include <process.h>
 3 #include <windows.h>
 4 long g_num; //登录次数
 5 unsigned int __stdcall Fun(void *pPM); //线程函数
 6 const DWORD THREAD_NUM = 10;//启动线程数
 7 unsigned int __stdcall Fun(void *pPM)  
 8 {  
 9 //由于创建线程是要一定的开销的,所以新线程并不能第一时间执行到这来   
10     int nThreadNum = *(int *)pPM; //子线程获取参数   
11     Sleep(50);//some work should to do   
12     g_num++;  //处理全局资源  
13 //    InterlockedIncrement(&g_num);
14     Sleep(0);//some work should to do   
15     printf("线程编号为%d  全局资源值为%d\n", nThreadNum, g_num);  
16     return 0;  
17 } 
18 int main()
19 {
20     printf("     原子操作 Interlocked系列函数的使用\n");
21     g_num = 0;
22     HANDLE  handle[THREAD_NUM];
23     int i=0;
24     while (i<THREAD_NUM)
25     {
26         handle[i] = (HANDLE)_beginthreadex(NULL, 0, Fun, &i, 0, NULL);  
27         i++;
28     }
29     
30     WaitForMultipleObjects(THREAD_NUM, handle, TRUE, INFINITE);
31     return 0;
32 }

输出结果不固定

 

posted @ 2013-04-16 10:37  qq921201008  阅读(185)  评论(0编辑  收藏  举报