看流星社区

 找回密码
 注册账号
查看: 2078|回复: 0

使用CriticalSection进行线程同步

[复制链接]

该用户从未签到

发表于 2017-6-2 13:28:55 | 显示全部楼层 |阅读模式
使用CriticalSection进行线程同步,在上个例子的基础上增加了四行代码,使用了四个函数:
EnterCriticalSection:eleteCriticalSection::EnterCriticalSection:eaveCriticalSection此时,打印出来的数字就相等了……


#include "stdafx.h"
#include <Windows.h>

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

DWORD WINAPI ThreadProc(__in  LPVOID lpParameter)
{
        ::EnterCriticalSection(&amp;cs);
        while(g_bContinue)
        {
                g_cnt1++;
                g_cnt2++;
        }
        :eaveCriticalSection(&amp;cs);
        return 0;
}

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

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

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

        :eleteCriticalSection(&amp;cs);

        ::CloseHandle(hThread[0]);
        ::CloseHandle(hThread[1]);
        return 0;
}
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-3-19 22:02

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表