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