기본적인 Mutex 초기화 방법들 프로그래밍(Programming)

요즘 나름의 반 안식년(?ㅎㅎ)으로 인해 글이 뜸해서 간단히 하나 남겨봅니다.

유닉스 시스템 계열에서 제공되는 pthread에서 동기화를 위하여 mutex라는 것이 자주 사용되는데,

mutex 변수 초기화 시에 사용되는 방법이 대표적으로 두 가지 정도가 있습니다.
(원래는 더 많지만 "가장" 기본적인 초기화를 기준으로)

그 중 하나가 바로 PTHREAD_MUTEX_INITIALIZER 이며, 해당 mutex를 default 속성으로 초기화 시켜줍니다.

pthread.h 헤더에 다음과 같이 정의되어 있습니다.

==============================================================
#define PTHREAD_MUTEX_INITIALIZER \
  {0, 0, 0, PTHREAD_MUTEX_TIMED_NP, __LOCK_INITIALIZER}
==============================================================


사용법은 다음과 같습니다.

----------------------------------------------------------------------
pthread_mutex_t mutx = PTHREAD_MUTEX_INITIALIZER;

int main( void )
{
        return 0;
}
----------------------------------------------------------------------


PTHREAD_MUTEX_INITIALIZER 사용시 주의할 점은 pthread_mutex_t type이 구조체 형태로 이루어져 있기 때문에

변수 선언 이후에는 사용할 수 없으며(다시말해, 선언과 동시에만 사용이 가능함), static mutex 전용이라는 것입니다.

즉, dynamic mutex 에서는 다른 방법을 사용해야 하는데, 이전에 말한 mutex 변수 초기화의 나머지 방법에 해당됩니다.

다음과 같은 초기화 함수를 사용할 수 있습니다.


=============================================================================
#include <pthread.h>


int  pthread_mutex_init(pthread_mutex_t  *mutex,  const  pthread_mutex-attr_t *mutexattr);
=============================================================================


첫 번째 인자는 mutex 변수, 두 번째 인자는 속성 정보를 뜻하며,

두 번째 인자가 NULL일 경우 default로 설정됩니다.

함수 사용은 static과 dynamic mutex 모두에 적용 가능하며,

static은 좀전에 보여주었기 때문에 이번엔 dynamic mutex로 예를들어 초기화하여 보겠습니다.

------------------------------------------------------------------------
int main( void )
{
        pthread_mutex_t *mutx_p;


        mutx_p = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t));
        pthread_mutex_init( mutx_p, NULL );


        free(mutx_p);
        return 0;
}
------------------------------------------------------------------------


지금까지 기본적인 mutex 변수의 초기화 방법을 알아보았습니다.


트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://hkpco.egloos.com/tb/898623 [도움말]

덧글

  • yundream 2008/10/01 21:57 # 삭제 답글

    어이쿠 요즘 뭐하시나여.
  • hkpco 2008/10/01 22:11 # 답글

    나름대로의 휴식(?)을 취하며 보내고있어요..ㅎㅎ
댓글 입력 영역