开发者社区> 开发与运维> 正文

临界区线程对象的使用

简介: 临界区线程对象的使用代码。

临界区线程对象的使用

#include <windows.h>
#include <iostream>
using namespace std;
 
CRITICAL_SECTION g_cs;
bool g_bContinue = true;
int g_count1 = 0;
int g_count2 = 0;
 
DWORD WINAPI ThreadProc(LPVOID lpParameter);
 
int main()
{
    HANDLE g_hTrd[2];
 
    InitializeCriticalSection(&g_cs);     //This function initializes a critical section object. 
    
    g_hTrd[0] = CreateThread(NULL,0,ThreadProc,NULL,0,NULL);
    g_hTrd[1] = CreateThread(NULL,0,ThreadProc,NULL,0,NULL);
    
    WaitForMultipleObjects(2,g_hTrd,FALSE,1000); 
    g_bContinue = false;
    
    CloseHandle(g_hTrd[0]);
    CloseHandle(g_hTrd[1]);
 
    DeleteCriticalSection(&g_cs);       //This function releases all resources used by an unowned critical section object. 
    
    Sleep(1);
    cout << "g_count1 = " << g_count1 << "\t g_count2 = " << g_count2 << endl;
    return 0;
}
 
 
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
    while(g_bContinue)
    {
        //This function waits for ownership of the specified critical section object. 
        //The function returns when the calling thread is granted ownership. 
        EnterCriticalSection(&g_cs); 
        g_count1++;
        g_count2++;
        cout << "g_cnt1 = " << g_count1 << "\t g_cnt2 = " << g_count2 << endl;
        //This function releases ownership of the specified critical section object. 
LeaveCriticalSection(&g_cs);                  
}
    return 0;
}

作者:铭毅天下
来源:CSDN
原文:https://blog.csdn.net/laoyang360/article/details/7720660
版权声明:本文为博主原创文章,转载请附上博文链接!

版权声明:本文中所有内容均属于阿里云开发者社区所有,任何媒体、网站或个人未经阿里云开发者社区协议授权不得转载、链接、转贴或以其他方式复制发布/发表。申请授权请邮件developerteam@list.alibaba-inc.com,已获得阿里云开发者社区协议授权的媒体、网站,在转载使用时必须注明"稿件来源:阿里云开发者社区,原文作者姓名",违者本社区将依法追究责任。 如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

集结各类场景实战经验,助你开发运维畅行无忧

其他文章