블로그 이미지
Kanais
Researcher & Developer 퍼즐을 완성하려면 퍼즐 조각들을 하나 둘씩 맞춰나가야 한다. 인생의 퍼즐 조각들을 하나 둘씩 맞춰나가다 보면 인생이란 퍼즐도 완성되는 날이 오려나...?

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

05-02 09:56

Recent Post

Recent Comment

Recent Trackback

Archive

2015. 5. 11. 11:19 Programming/Win32 API

이글은 '선문비트 고급과정'에서 강의받은 내용을 토대로 작성하였으며, 비트 교육센터 자료를 참고하여 올린내용입니다. 

문제가 될시 삭제가 될 수 있습니다.

작성날짜    : 2011-03-16



CriticalSection

뮤텍스

세마포어

이벤트

매커니즘

(CRITICALSECTION cs)

동 객

동 객

동 객

InitializeCriticalSection

CreateMutex

CreateSemaphore

CreateEvent

ReleaseCriticalSection

CloseHandle

CloseHandle

CloseHandle

EnterCriticalSection

WaitForSingleObject

WaitForSingleObject

WaitForSingleObject

LeaveCriticalSection

ReleaseMutex

ReleaseSemaphore

SetEvent

하나의 프로세스 내

(변수)

하나의 System

(문자열)

하나의 System

(문자열)

하나의 System

(문자열)

 

상호 배제

(상호 배제를 쓸경우 CloseHandle WaitForSingleObject를 쓸 기연성이 없다)

개의 자원

병렬처리

(다른 스레드가 사용이 끝났는지 확인)



매커니즘

Critical Section

  자원경쟁 문제가 있을  자원경쟁이 일어나는 구간

 

// 하나의 같은 프로세서에서만 사용 가능.

CriticalSection cs;

// 자원 경쟁이 일어날  있다.

InitializeCreticalSection(&cs); // 초기화하면 이후부터 크리티컬 섹션을 사용할  있다.

DeleteCreticalSection(&cs);    // 크리티컬 섹션 파괴

EnterCriticalSection(&cs);                 // 다른 스레드가 같은 크리티컬 섹션에 들어올  없음

// WaitForsingleObject(hMu,INFINITE) // 하나의 동기화 객체를 기다리는 대기 함수.

LeadceCriticalSection(&cs);    // 크리티컬 섹션 해제(다른 스레드가 사용가능)

// ReleaseMutex(hMu);

 

// 서로 다른 프로세서라면..

 

뮤텍스
상호배제적으로 사용할  쓴다(누군가 쓰고 있다면  쓰고  경우 쓴다)

 

void main()

{

   HANDLE hMu;

 

   hMu = CreateMutex(0,false,L"Hello");

           // 0 : 보안속성 설정 (보통 0)

           // false : 생성함과 동시에 소유할 것인지를 지정

           // L"Hello" : 뮤텍스 이름을 지정

   if(GetLastError() == ERROR_ALREADY_EXISTS)

   {

           CloseHandle(hMu);

           return;

   }

   // to do

   CloseHandle(hMu);

}

 

// n개의 자원 개수가지고 자원경쟁을 할때에도 사용할  있다.

// 같은 프로세서가 아니더라도 사용 가능.

 

 

세마 포어
유닉스에서 count 세마포어를 일컬음

HANDLE         hSema;

 

hSema = CreateSemaphore(0,3,3,L"Hello");

0 :

3 : 현재 사용할  있는 개수

3 : 최대 사용 개수

L"Hello" : 세마포어의 이름

 

DWORD sc;

WaitForSingleObject(hSema, INFINITE);      // INFINITE  -1 이라서 무한대기 상태

 

ReleaseSemaphore(hSema, 1, &sc);   // 세마포어 반납

 

 

이벤트

자동 리셋 이벤트     // Critical Section 동일 하게 사용시 사용

수동 리셋 이벤트      

 

HANDLE hEvent;

 

hEvent = CreateEvent(0,false,false,L"Hello");

           // 0 :

           // flase : 수동인지 자동인지 설정

           // flase : 생성함과 동시에 신호상태로 만들지  신호 상태로 만들지 설정

           // L"Hello" : Event 이름

CloseHandle(hEvent);

 

삽질 Thread

ReSetEvent(hEvent);

삽질  작업

WaitForSingleObject(hEvent,INFINITE);

'Programming > Win32 API' 카테고리의 다른 글

[Win32 API] Win32 API, Window와 Unix  (0) 2015.05.11
[Win32 API] 컨트롤도 윈도우다  (0) 2015.05.11
[Win32 API] 동기화  (0) 2015.05.11
[Win32 API] CreateFile 함수  (0) 2015.05.11
[Win32 API] SetFilePointer  (0) 2015.05.11
posted by Kanais