기본 콘텐츠로 건너뛰기

기본적인 Mutex 초기화 방법들

출처 : http://hkpco.egloos.com/898623

유닉스 시스템 계열에서 제공되는 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 변수의 초기화 방법을 알아보았습니다.

댓글

  1. Casino Slot Machine - MapyRO
    Casino 여수 출장샵 Slot Machine. Free Slot Machine 강릉 출장샵 Map: 0.1.7M. No 경상북도 출장마사지 download required. 1-10 of 1. MapyRO Casino 구리 출장샵 Slot Machine. 수원 출장안마

    답글삭제

댓글 쓰기

이 블로그의 인기 게시물

UNIX C errno 정리( 에러 번호 )

#define EPERM   1   /* Operation not permitted      */ #define ENOENT  2   /* No such file or directory        */ #define ESRCH   3   /* No such process          */ #define EINTR   4   /* interrupted system call      */ #define EIO 5   /* I/O error                */ #define ENXIO   6   /* No such device or address        */ #define E2BIG   7   /* Arg list too long            */ #define ENOEXEC 8   /* Exec format error            */ #define EBADF   9   /* Bad file descriptor          */ #define ECHILD  10  /* No child processes           */ #define EAGAIN  11  /* Resource temporarily unavailable */ #define ENOMEM  12  /* Not enough space         */ #define EACCES  13  /* Permission denied            */ #define EFAULT  14  /* Bad address              */ #define ENOTBLK 15  /* Block device required        */ #define EBUSY   16  /* Resource busy            */ #define EEXIST  17  /* File exists              */ #define EXDEV   18  /* Improper link            */ #define ENODEV  19  /* No such

Baud Rate 와 Bit Rate 의 차이점

출처 - http://solvline.com/technical_info/tech_note_view.php?no=22&fno=&PHPSESSID=f5f096a5b1090ca017552de78745b8aa 1. Bit Rate 와 Baud Rate 의 정의 1.1 Bit Rate 정의 비트 레이트 (Bit Rate) 는 초당 얼마나 많은 데이터 비트 (‘1’ 또는 ‘ 0’) 를 전송할 수 있는가를 나타내는 말이다 . 또 우리가 자주 쓰는 BPS 라는 말이 있는데 이는 Bit Per Second 로서 초당 보낼 수 있는 비트의 수를 나타낸다 . 이는 모뎀의 전송속도를 측정하는 단위로 사용되어 졌다 . 일반적으로 28,800 모뎀이라면 28,800bps 의 전송속도를 나타내는 것이다 . 예를 들어 , 2400bit/second(bps) 라면 초당 2400 개의 비트 정보를 전달할 수 있다는 뜻이다 . 이는 반대로 이야기하면 1 비트 정보를 보내기 위해서 416.6us 의 시간 (1s/2400bit) 이 필요하다는 이야기이다 . 1.2 Baud Rate 보 레이트 (Baud Rate) 는 초당 얼마나 많은 심볼 (Symbol, 의미 있는 데이터 묶음 ) 을 전송할 수 있는가를 나타내는 말이다 . 이는 이론적인 통신 단위로 초당 신호 (Signal) 요소의 수 를 나타낸다 . 만약 하나의 신호요소가 2 비트로 구성되어 있는 경우라면 보는 BPS 의 반이 된다 . 즉 , 1 보 동안 2 비트가 전송된다 . 일반적으로 신호를 1 비트로 여긴다면 BPS 와 같은 단위가 된다 . 심볼이란 말은 의미 있는 데이터 비트의 묶음이다 . 일반적으로 시리얼 통신에서는 데이터 비트가 8-bit 를 사용하므로 이를 하나의 심볼이라고 이야기 할 수 있다 . 1 개의 symbol ( 또는 character) 는 8 개의 bit 정보와 같다 . 예를 들어 , 2400 baud rate 를 갖는다는 말은 1 초에 2400 개의

[C언어] epoll 설명

출처 -  http://biscuit.cafe24.com/moniwiki/wiki.php/epoll 1  준비 2  socket 프로그래밍 기본 3  비동기 입출력 (Asyncronous I/O) & 입출력 다중화 (I/O Multiplexing) 4  select 5  select 와  poll  그리고 epoll. 그 차이 6  epoll 프로그래밍 흐름 7  epoll 함수들 8  epoll References 빈폴도 아니고, 이폴이란 대체 무엇일까? 당신은 서버한대로 몇 명의 동시접속자를 수용할 수 있습니까? 최근에 인터넷에 떠돌아다니는  c10k_problem 은 대당 10K, 즉 1만명의 동시접속(concurrent users)을 받아보자는 문제다. 서버 프로그래밍을 해 본 사람이라면 이게 그리 만만한 문제가 아니라는 것을 직감할 듯 --; 요즘의 Massive 온라인게임은 '분산처리'가 기본이라 한 대에서 많은 이용자를 커버하기보다는 여러대가 하나의 세트로써 구성하는 것이 인기가 있고 다수의 커넥션보다는 소수 커넥션에서의 대용량 전송이 더 중요한 요소이기도 하다. c10k problem에 나또한 관심을 가지게 되었고, epoll 이 최근 급부상하는 솔루션으로 인기가 있다기에 한 번 파보자 하고 결심하고 이 글을 시작했다. 마침 wiki에도 관심이 있던 차라, wiki 공부도 할 겸해서 epoll 을 연구하는 과정을 이 wiki에 담아 보고자 한다. 1  준비  # * 누구를 위한 epoll 인가? epoll은 '한 대의 서버에서 아주많은 동시접속자를 처리하기 위한 수단'이다. 이미 당신이 그 수단을 알고 있다면 - epoll 이건 아니건 - 이 글은 별로 도움이 안될듯하다. 동시접속자가 천명을 넘지않는다면 구닥다리 방법을 이용하는 것과 큰 차이가 없으리라 본다. 또한, epoll은  Linux 프로그래머의 도구 이다. M$ wind