1-1. 교착 상태가 발생하는 필요충분 조건 4가지를 쓰시오.(다들 이 문제 냈을 거 같아서 나도 내야지~),

1-2. 교착 상태를 해결하기 위한 방법에는 무엇이 있는지 쓰시오.

1-3. 애플리케이션의 개발자로서 개발할 때 우리가 사용할 수 있는 기술이 무엇이고 그 이유를 쓰시오.

  1. 다음은 교착 상태 예제이다.

    /* 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() 순서로 호출하였을 때 어느 부분 때문에 교착 상태가 일어나는 지 쓰시오. 또한 이 교착 상태를 해결하려면 어떻게 해야하는 지 쓰시오.