zoukankan      html  css  js  c++  java
  • CriticalSection 临界区

    // 临界区.cpp : 定义控制台应用程序的入口点。
    //

    #include "stdafx.h"
    #include<windows.h>
    #include<iostream>
    using namespace std;

    DWORD g_cnt1;
    DWORD g_cnt2;
    BOOL g_bContinue = TRUE;
    CRITICAL_SECTION cs;

    DWORD WINAPI ThreadProc(__in LPVOID lpParameter)
    {
    ::EnterCriticalSection(&cs);
    while (g_bContinue)
    {
    g_cnt1++;
    g_cnt2++;
    printf("g_cnt1=%d ", g_cnt1);
    printf("g_cnt2=%d ", g_cnt2);
    }
    ::LeaveCriticalSection(&cs);
    return 0;
    }

    int _tmain(int argc, _TCHAR* argv[])
    {
    HANDLE hThread[2];
    g_cnt1 = g_cnt2 = 0;
    ::InitializeCriticalSection(&cs);

    hThread[0] = ::CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);
    hThread[1] = ::CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);

    Sleep(100);
    g_bContinue = FALSE;
    ::WaitForMultipleObjects(2, hThread, TRUE, INFINITE);
    printf("g_cnt1=%d ", g_cnt1);
    printf("g_cnt2=%d ", g_cnt2);

    ::DeleteCriticalSection(&cs);

    ::CloseHandle(hThread[0]);
    ::CloseHandle(hThread[1]);
    getchar();
    return 0;
    }


    /*函数原型:DWORD WaitForMultipleObjects(

    DWORDnCount, // number of handles in array

    CONST HANDLE*lpHandles, // object-handle array

    BOOLbWaitAll, // wait option

    DWORDdwMilliseconds// time-out interval

    );WaitForMultipleObjects函数用于等待多个内核对象,
    前两个参数分别为要等待的内核对象的个数和句柄数组指针。
    如果将第三个参数bWaitAll的值设为TRUE,等待的内核对象全部变成受信状态以后此函数才返回。
    否则,bWaitAll为0的话,只要等待的内核对象中有一个变成了受信状态,
    WaitForMultipleObjects就返回,返回值指明了是哪一个内核对象变成了受信状态*/

  • 相关阅读:
    [ML] the notes
    [Java] 在 jar 文件中读取 resources 目录下的文件
    [LeetCode] 53. Maximum Subarray 解题思路
    [git] git 分支管理和工作流程
    debug实战:Unmanaged High Memory非托管高内存
    batch insert 1 million datas into mysql
    nuget的小Tips
    debug实战:进程Hang+High CPU
    debug实战:COM组件GetToSTA导致高内存+GC被阻塞
    svn cleanup failed问题解决
  • 原文地址:https://www.cnblogs.com/lsh123/p/6291154.html
Copyright © 2011-2022 走看看