1) 교착 상태

#thread 1 do
void *do_work_one (void *param){
	pthread_mutex_lock(&first_mutex);
	pthread_mutex_lock(&second_mutex);
	/**
	* Do work
	**/
	pthread_mutex_unlock(&second_mutex);
	pthread_mutex_unlock(&first_mutex);
	
	prhtread_exit(0);
}

#thread 2 do
void *do_work_one (void *param){
	pthread_mutex_lock(&second_mutex);
	pthread_mutex_lock(&first_mutex);
	/**
	* Do work
	**/
	pthread_mutex_unlock(&first_mutex);
	pthread_mutex_unlock(&second_mutex);
	
	prhtread_exit(0);
}

⇒ 서로 뮤텍스를 갖고 있다 계속 방출하는 사이클이 보인다 → 3절에서 나온다.

2) 라이브락 (LiveLock)

#thread 1 do
void *do_work_one (void *param){

	int done = 0;
	
	while(!done){
		pthread_mutex_lock(&first_mutex);
		if (pthread_mutex_trylock(&second_mutex)){
			/**
			* Do work
			**/
			pthread_mutex_unlock(&second_mutex);
			pthread_mutex_unlock(&first_mutex);
			done = 1;
		}
		else{
			pthread_mutex_unlock(&first_mutex)
		}
		prhtread_exit(0);
	}
}

#thread 2 do
void *do_work_one (void *param){

	int done = 0;
	
	while(!done){
		pthread_mutex_lock(&second_mutex);
		if (pthread_mutex_trylock(&first_mutex)){
			/**
			* Do work
			**/
			pthread_mutex_unlock(&first_mutex);
			pthread_mutex_unlock(&second_mutex);
			done = 1;
		}
		else{
			pthread_mutex_unlock(&second_mutex)
		}
		prhtread_exit(0);
	}
}

⇒ 스레드가 동시에 저렇게 시도할 때 교착상태가 발생한다. 이 떄 대기 시간을 두면 해결할 수 있다.