POSIX 동기화

뮤텍스 락 (Mutex Locks)

뮤텍스 락은 Pthreads에서 사용하는 기본적인 동기화 기술입니다. 스레드는 임계 구역에 진입하기 전에 락을 획득하고, 임계 구역을 빠져나갈 때 락을 해제합니다.

  • 자료형: pthread_mutex_t

  • 초기화: pthread_mutex_init(&mutex, NULL) 함수를 사용하여 뮤텍스 락을 생성하고 초기화합니다.

  • 사용: pthread_mutex_lock(&mutex) 함수로 락을 획득하고, pthread_mutex_unlock(&mutex) 함수로 락을 해제합니다. 만약 락이 이미 잠겨있다면, pthread_mutex_lock()을 호출한 스레드는 락이 해제될 때까지 대기합니다.


세마포어 (Semaphores)

POSIX는 이름 있는(named) 세마포어와 이름 없는(unnamed) 세마포어 두 가지를 지원합니다. 두 종류 모두 wait()signal() 연산에 해당하는 sem_wait()sem_post() 함수를 사용합니다.

  • 이름 있는 세마포어:

    • sem_open("SEM", O_CREAT, 0666, 1) 함수를 사용하여 세마포어를 생성하고 엽니다.

    • 이름을 사용하므로, 서로 관련 없는 여러 프로세스들이 쉽게 동기화 메커니즘을 공유할 수 있습니다.

  • 이름 없는 세마포어:

    • sem_init(&sem, 0, 1) 함수를 사용하여 세마포어를 메모리에 직접 초기화합니다.

    • 두 번째 매개변수가 0이면, 이 세마포어는 이를 생성한 프로세스에 속한 스레드들만 공유할 수 있습니다. 공유 메모리 영역에 배치하면 다른 프로세스와도 공유할 수 있습니다.


조건 변수 (Condition Variables)

Pthreads에서 조건 변수는 뮤텍스 락과 함께 사용됩니다. 이는 C언어에 모니터(monitor) 구조가 없기 때문입니다.

  • 초기화: pthread_cond_t 자료형을 사용하며, pthread_cond_init() 함수로 초기화합니다.

  • 대기: pthread_cond_wait() 함수는 스레드가 특정 조건이 충족될 때까지 기다리게 합니다. 이 함수는 호출 시 뮤텍스 락을 자동으로 해제하고 스레드를 대기 상태로 만듭니다. 조건이 충족되어 깨어난 후에는 뮤텍스 락을 다시 획득한 뒤 실행을 재개합니다. 조건이 다시 거짓이 될 수 있으므로, 대기 함수는 보통 while 루프 안에서 호출됩니다.

  • 신호: pthread_cond_signal() 함수는 조건 변수에서 대기 중인 스레드 중 하나를 깨워줍니다.

Last updated