• 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就返回,返回值指明了是哪一个内核对象变成了受信状态*/

  • 相关阅读:
    2月24日-寒假进度24
    2月23日-寒假学习进度23
    2月22日-寒假学习进度22
    2月21日-寒假学习进度21
    第一周冲刺意见汇总
    团队绩效评估
    团队工作第七天
    团队工作第六天
    团队工作第五天
    团队工作第四天
  • 原文地址:https://www.cnblogs.com/lsh123/p/6291154.html
Copyright © 2020-2023  润新知