본문 바로가기
VisualStudio.C++.C#/코딩팁,함수활용,단편

Critical Section (크리티컬 섹션)

by 리치굿맨 2020. 5. 13.

 

 

개요

Critical Section (크리티컬 섹션)  을 설정한 구간은 한 번에 하나의 "스레드"에서만 사용가능하다.
- 프로세스 내에 여러 스레드가 있는 환경에서, 우리가 설정해둔 "크리티컬 영역" 에 어떤 스레드가 먼저 진입하여 크리티컬 영역을 벗어나지 않은 상태에서는 동일 프로세스의 다른 스레드에서 해당 크리티컬 영역에 진입하는 것을 금지한다. 
- 후발 스레드의 "크리티컬 섹션" 진입금지 방식에 "리턴" 혹은 "대기"를 설정할 수 있다. "대기"란 선 진입한 스레드가 해당영역을 벗어날때까지 후발 스레드는 "대기" 상태로 있다가  선진입한 스레드가 해당영역 벗어나면 대기중인 후발 스레드가 크리티컬 영역을 실행하는것. "리턴"이란 후발 스레드는 "대기"상태에 있지 않고 "리턴"되어 크리티컬 영역 실행 하지 않는 방식이다.


구현방법. - Win32API 함수 또는 MFC 이용가능.

 

Critical Section - Win32API 함수 이용.

  Win32API 함수.

  

 

 함수명 개요 설명
 InitializeCriticalSection 크리티컬 섹션 오브젝트 초기화.  
 DeleteCriticalSection 크리티컬 섹션 오브젝트 제거.  
 EnterCriticalSection 크리티컬 섹션 시작부 지정.  크리티컬 영역을 선점한 스레드가 있는 경우 후발 스레드가 진입하려는 경우 진입대기상태에 있고, 선점 스레드가 크리티컬 영역벗어난 경우 후발 스레드가 해당영역 실행함.
 LeaveCriticalSection 크리티컬 섹션 끝 지정.  
 TryEnterCriticalSection 크리티컬 섹션 시작부 지정.  크리티컬 영역을 선점한 스레드가 있는 경우 후발 스레드가 진입하려는 경우 진입대기 하지 않고 리턴됨. 즉,  후발스레드는 크리티컬 영역 실행하지 않고 건너뛰게 됨.



 코드예.

 

CRITICAL_SECTON g_cs;  // 크리티컬 섹션 오브젝트 선언.


::InitializeCriticalSection(&g_cs); //  CRITICAL_SECTON g_cs 초기화.


::DeleteCriticalSection(&g_cs); //  프로그램 종료시 등의 시점에 CRITICAL_SECTON g_cs 제거.


// 크리티컬 영역 지정예.
::EnterCriticalSection(&g_cs);
이 부분이 "크리티컬 영역" 으로 됨.
::LeaveCriticalSection(&g_cs);

 

 

 

Critical Section - MFC 클래스 CCriticalSection 이용.

헤더 : afxmt.h


 코드예.

CCriticalSection g_CS;  // 전역으로 변수선언. 


// 크리티컬 영역 지정예.
g_CS.Lock();
이 부분이 "크리티컬 영역" 으로 됨.
g_CS.Unlock();

 

 

 

 

 

코드예 

 

//Definition of critical section class
class CMyCritSectClass
{
   static CString _strShared; //shared resource
   static CCriticalSection _critSect;

public:
   CMyCritSectClass(void) {}
   ~CMyCritSectClass(void) {}
   void SomeMethod(void); //locks, modifies, and unlocks shared resource
};

//Declaration of static members and SomeMethod
CString CMyCritSectClass::_strShared;
CCriticalSection CMyCritSectClass::_critSect;

void CMyCritSectClass::SomeMethod()
{
   _critSect.Lock();
   if (_strShared == "")
      _strShared = "<text>";
   _critSect.Unlock();
}

 

 

상위 정리글

 

Visual Studio/VC++/C/C# 활용정리 -> http://igotit.tistory.com/11

 

 

Visual Studio , Visual C++ 활용 정리.

Visual Studio C++ 활용 Visual Studio C++ Visual Studio Visual C++ / C# 1.설치, 설정 주제 비고. Visual Studio 2010 설치. Visual Studio 2013 (Community)무료 설치. Visaul Studio 2015 (Community)무료..

igotit.tistory.com

 

 


첫 등록 : 2016.01.12

최종 수정 : 2020.05.13

단축 주소 : https://igotit.tistory.com/545

 


 

댓글0


.    
현물 |선물 인버스 |선물 USDT     현물 | 선물 USDT |봇제작툴/카피트레이딩     현물 |선물 인버스 |선물 USDT     .