zoukankan      html  css  js  c++  java
  • 线程中的临界区的应用

    处理多线程任务时,如果不加临界区,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"
    ",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
    ", m, n);
    33     LeaveCriticalSection(&cs);
    34     return 0;
    35 }
  • 相关阅读:
    wm
    usual
    itk_option remove
    Label Options
    imosflm controller
    set font
    namespace code
    git 之五分钟教程
    git 之五分钟教程
    学习perl正则表达式
  • 原文地址:https://www.cnblogs.com/littlepear/p/5936502.html
Copyright © 2011-2022 走看看