ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 뮤텍스란?
    Windows 프로그래밍 2019. 1. 2. 15:55

     

    개발을 하다 보면 쓰레드를 여러 개 이용하게 될 때가 있다.

    그런데 만약 다수의 쓰레드가 하나의 변수 또는 자원에 동시에 접근한다면? 우리가 원하는 결과값이 나오지 않을 수도 있다.

     

    뮤텍스(Mutex) 는 이러한 상황을 만들지 않기 위해 사용하는 커널 객체 중 하나이다.

    이와 같은 동기화 커널 객체에는 '세마포어' 라는 것도 존재한다.

     

    뮤텍스를 사용하면 한 번에 하나의 쓰레드만 특정 자원에 접근해 연산하게 된다.

    예를 들어 1번 쓰레드가 특정 변수에 접근해 연산을 수행중이라면 2번 쓰레드는 1번 쓰레드의 연산이 끝날때까지 해당 변수에 접근할 수 없다.

     

    실제 뮤텍스 사용 전후의 차이를 보고 싶어서 MFC를 이용해 한쪽은 뮤텍스를 사용하고 한쪽은 사용하지 않은 프로그램을 만들어 보았다. (실행파일은 첨부해 두었다)

     

     

    while(1){ count += 1; Sleep(100); }

    각 쓰레드마다 위와 같은 코드가 동작되며 하나의 변수를 쓰레드 실행마다 1씩 증가시키게 된다.

     

    왼쪽은 뮤텍스를 사용하지 않은 결과이고 오른쪽은 뮤텍스를 사용한 결과이다.

    동시에 시작했지만 왼쪽이 오른쪽보다 거의 두배 정도 빠른 속도로 변수가 카운트 된 것을 볼 수 있다.

     

    뮤텍스를 사용하지 않은 경우에는 두 개의 쓰레드가 동시에 자원에 접근해 카운트를 올렸기 때문에 뮤텍스를 사용한 경우보다 더 빠르게 값이 증가된 것이다.

     

     

    MutexProject.exe
    다운로드

     

    'Windows 프로그래밍' 카테고리의 다른 글

    Volatile 변수란?  (2) 2019.01.07
    Service 프로세스에서 winlogon.exe  (0) 2019.01.03
    OnTimer 함수  (0) 2019.01.03
    Mutex와 Semaphore의 차이점과 사용방법  (0) 2019.01.03
    화면 캡쳐와 Printwindow 함수  (6) 2019.01.02

    댓글

Designed by Tistory.