码迷,mamicode.com
首页 > 编程语言 > 详细

C++ CRITICAL_SECTION 临界区

时间:2020-04-07 14:15:26      阅读:42      评论:0      收藏:0      [点我收藏+]

标签:printf   oid   windows   ada   ica   argv   space   obj   color   

个人感觉这临界区相当于java 中的sy 关键字那种 相当于重度锁吧 加锁之后 只允许本线程读写 其他线程读都不能 效率有点低

 

类似于 你上厕所锁门 别人就进不来 其他人想要使用时没法使用等你出来了才可以使用

 

下面是一段伪代码 如果不出错的话应该输出4000

#include <iostream>
#include<windows.h>
using namespace std;
CRITICAL_SECTION ics;

int icount=0; 
DWORD WINAPI ThreadA(LPVOID lp)
{

    for(int i=0;i<1000 ;i++ )
    {
//    EnterCriticalSection(&ics);
    Sleep(1);
    icount++;
//    LeaveCriticalSection(&ics);
     }
    

    
return 0;
}

DWORD WINAPI ThreadB(LPVOID lp)
{

    for(int i=0;i<1000 ;i++ )
    {
//    EnterCriticalSection(&ics);
        Sleep(1);
        icount++;
//    LeaveCriticalSection(&ics);
    }
    
    
return 0;
}

DWORD WINAPI ThreadC(LPVOID lp)
{
    
    for(int i=0;i<1000 ;i++ )
    {
//        EnterCriticalSection(&ics);
        Sleep(1);
        icount++;
//        LeaveCriticalSection(&ics);
    }
  
return 0;
}

DWORD WINAPI ThreadD(LPVOID lp)
{
    
    for(int i=0;i<1000 ;i++ )
    {
//    EnterCriticalSection(&ics);
         Sleep(1);
        icount++;
//      LeaveCriticalSection(&ics);
    }
    
    return 0;
}
int main(int argc, char *argv[])
{   InitializeCriticalSection(&ics);
    HANDLE ha=CreateThread(NULL,0,ThreadA,NULL,0,NULL);
    HANDLE hb=CreateThread(NULL,0,ThreadB,NULL,0,NULL);
     HANDLE hC=CreateThread(NULL,0,ThreadC,NULL,0,NULL);
    HANDLE hD=CreateThread(NULL,0,ThreadD,NULL,0,NULL);
   
    ::WaitForSingleObject(ha,INFINITE); 
    ::WaitForSingleObject(hb,INFINITE); 
    ::WaitForSingleObject(hC,INFINITE); 
    ::WaitForSingleObject(hD,INFINITE); 
    printf("%d",icount);
    return 0;
}

 

C++ CRITICAL_SECTION 临界区

标签:printf   oid   windows   ada   ica   argv   space   obj   color   

原文地址:https://www.cnblogs.com/xuexidememeda/p/12653096.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!