데드락(Deadlock)은 서로가 서로의 작업이 끝나기를 기다리며 무한정 대기하는 상태를 말합니다. 여기서 '서로'는 프로세스나 쓰레드를 의미합니다. 데드락이 발생하기 위해서는 다음 네 가지 조건을 모두 만족해야 합니다.
다음은 데드락을 일으키는 자바 코드입니다.
public class DeadlockExample {
public static void main(String[) args) {
Object lock1 = new Object();
Object lock2 = new Object();
Thread thread1 = new Thread(() -> {
synchronized(lock1) {
// ...
synchronized(lock2) {
// ...
}
}
});
Thread thread2 = new Thread(() -> {
synchronized(lock2) {
// ...
synchronized(lock1) {
// ...
}
}
});
thread1.start();
thread2.start();
}
}
synchronized
키워드를 사용함으로써 만족합니다.synchronized
키워드를 사용함으로써 만족합니다.운영체제가 데드락을 해결하는 방법으로는 크게 네 가지가 있습니다. 운영체제는 이러한 방법들을 적절히 사용하여 데드락을 해결합니다.