POSIX는 동기화 도구로 다음 3가지를 제공한다.
1 ) mutext lock
#include <pthread.h> // mutex를 사용하기 위함.
pthread_mutex_t mutex; // pthread_mutex_t 데이터형 사용.
pthread_mutex_init(&mutex, NULL);
pthread_mutex_lock(&mutex);
pthread_mutex_unlock(&mutex);
2 ) semaphore
#include <semaphore.h> // 세마포 사용을 위함.
// 이름이 있는 세마포
sem_t *sem; // sem_t 데이터 형 사용
sem = sem_open("SEM", O_CREAT, 0666, 1);
// 이름이 없는 세마포
sem_t sem
sem_init(&sem, 0, 1) // 2번 인자 -> 0 : 같은 프로세스만 접근 가능, 1 : 다른 프로세스에서도 접근 가능
// 연산
sem_wait(&sem);
sem_post(&sem)
3 ) 조건 변수
C언어는 모니터 개념이 없기 때문에 mutex lock을 이용.
#include <pthread.h>
pthread_mutex_t mutex;
pthread_cond_t cond;
pthread_mutex_init(&mutex, NULL); // 초기값 만들기
pthread_cond_init(&cond, NULL); // 변수 초기값 만들기
pthread_mutex_lock(&mutex) // lock획득
while(a != b) // a == b가 같아질 때 까지반복
pthread_cond_wait(&cond, &mutex); // 조건 변수를 기다리는데 사용됨.
pthread_mutex_unlock(&mutex);
pthread_cond_signal(&cond); // 대기열의 프로세스를 깨워줌.
pthread_mutex_unlock(&mutex); //락 해제