1-1. 교착 상태가 발생하는 필요충분 조건 4가지를 쓰시오.(다들 이 문제 냈을 거 같아서 나도 내야지~),
1-2. 교착 상태를 해결하기 위한 방법에는 무엇이 있는지 쓰시오.
1-3. 애플리케이션의 개발자로서 개발할 때 우리가 사용할 수 있는 기술이 무엇이고 그 이유를 쓰시오.
다음은 교착 상태 예제이다.
/* thread_one은 이 함수를 실행한다. */
void *do_work_one(void *param)
{
pthread_mutex_lock(&first_mutex);
pthread_mutex_lock(&second_mutex);
/**
* Do some work
*/
pthread_mutex_unlock(&second_mutex);
pthread_mutex_unlock(&first_mutex);
pthread_exit(0);
}
/* thread_two는 이 함수를 실행한다.*/
void *do_work_two(void *param)
{
pthread_mutex_lock(&second_mutex);
pthread_mutex_lock(&first_mutex);
/**
* Do some work
*/
pthread_mutex_unlock(&first_mutex);
pthread_mutex_unlock(&second_mutex);
pthread_exit(0);
}
do_work_one() → do_work_two() 순서로 호출하였을 때 어느 부분 때문에 교착 상태가 일어나는 지 쓰시오. 또한 이 교착 상태를 해결하려면 어떻게 해야하는 지 쓰시오.