1) POSIX mutex 락

pthread_mutex_t mutex;

//pthread mutex 생성
pthread_mutex_init(&mutex,NULL) // 첫 번째 매개변수는 mutex 포인터를, 두 번쨰는 속성을 디폴트값으로

/* acquire the mutex lock*/
pthread_mutex_lock(&mutex) -> 포인터를 가르키며 사용

/* critical secction*/
prtread _mutex_nulock(&mutex)

=> 연산 성공시 0을 반환한다. 오류는 0이 아닌 수

+) 세마포 방식은 스핀락 방식인 mutex와 다르게 대기 큐를 만들어 거기에 대기시킨다.

2) POSIX 세마포

sem_t *sem;

/* Create th semaphore and initialize it to 1 */
sem = sem_open("SEM",O_CREATE,0666,1)
/* 세마포 명, 세마포가 존재하지 않을 시 생성, 권한설정, 1로 초기화 */

-------------------------------------------------------------
//acquire
sem_wait(sem);

//critical section

//release
sem_port(sem);
sem_t sem;

/* Create th semaphore and initialize it to 1 */
sem.init(&sem, 0, 1);
/* 세마포 지정 포인터, 세마포를 만든 프로세스에 속한 스레드만 해당 세마포를 공유, 1로 초기화 */

-------------------------------------------------------------
//acquire
sem_wait(&sem);

//critical section

//release
sem_port(&sem);

3) POSIX 조건 변수

pthread_mutex_t mutex;      // 조건 변수 접근 락
pthread_cond_t cond_var;    // 조건 변수

phread_mutex_init(&mutex,NULL);
phread_cond_init(&cond_var,NULL);

-------------------------------------------------------------
pthread_mutex_lock(&mutex);
while (a != b)
	pthread_cond_wait(&cond_var, &mutex);
pthread_mutex_unlock(&mutex);

/* 조건 변수에 접근하도록 하는 mutex 먼저 받고
   mutex가 있는지 확인
   조건 변수에 접근 가능한 mutex 반납 */