码迷,mamicode.com
首页 > 编程语言 > 详细

线程中的临界区的应用

时间:2016-10-07 20:15:24      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

处理多线程任务时,如果不加临界区,CPU来回切换,导致数据出现错误,所以需要用到临界区。

读者可以把Enter和leave屏蔽了看看什么效果。

 1 // xiancheng.cpp : 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include <iostream>
 6 #include <Windows.h>
 7 using namespace std;
 8 CRITICAL_SECTION cs;    //一个结构体,两个LONG型,两个HANDLE型,一个ULONG_PTR型.
 9 DWORD WINAPI ThreadProc(LPVOID Param);
10 int m, n;
11 int main()
12 {
13     InitializeCriticalSection(&cs);
14     HANDLE ThreadHandle[10] = { 0 };
15     for (int i = 0; i < 10; i++)
16     {
17         ThreadHandle[i] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc, NULL, 0, NULL);
18     }
19     WaitForMultipleObjects(10, ThreadHandle, TRUE, INFINITE); //TRUE是全部事件都授信了才返回。FALSE一个事件授信才返回。
20     DeleteCriticalSection(&cs);
21     printf("%d %d"\r\n",m,n);
22     return 0;
23 }
24 DWORD WINAPI ThreadProc(LPVOID Param)
25 {
26     EnterCriticalSection(&cs);
27     for (int i = 0; i < 100000000; i++)
28     {
29         m++;
30         n++;
31     }
32     printf("%d %d\r\n", m, n);
33     LeaveCriticalSection(&cs);
34     return 0;
35 }

 

线程中的临界区的应用

标签:

原文地址:http://www.cnblogs.com/littlepear/p/5936502.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!