반응형

데드락 3

Part 4-2-8. 멀티쓰레드 프로그래밍 : 데드락

멀티 쓰레드 데드락 데드락의 발생 조건은 이전 시간에 알아본 상호배제 말고도 다양한 상황에서 다양한 조건으로 일어난다. 데드락 발생 조건의 다른 예시를 알아보자. 파란색이 화장실이라고 가정하고, 화장실에는 자물쇠가 2개가 잠겨 있는데, 이 때 직원 A, B가 화장실을 이용하기 위해 서로 경쟁을 한다고 가정해보자. 직원 A는 위의 자물쇠를 획득하고, 직원 B는 아래의 자물쇠를 획득했다. 하지만 자물쇠는 두 개를 동시에 가지고만 있어야만 열 수 있는데, 상황이 이렇게 되니 직원 A는 위 자물쇠를 획득한 상태에서 아래 자물쇠를 직원 B에게 달라고 요청을 하고, 직원 B는 아래 자물쇠를 획득한 상태에서 위 자물쇠를 직원 B에게 달라고 요청을 하는 상태가 된다. 즉 아래 이미지와 같이 되는 것이다. 따라서 이런 ..

Part 4-2-7. 멀티쓰레드 프로그래밍 : Lock 기초

멀티 쓰레드 Lock (OS에서는 크리티컬 섹션(CriticalSection), C++에서는 std::mutex 라고 불린다.) Interlocked 계열 메서드는 성능도 빠르고 좋긴 하지만, 단점이 존재한다. 바로 정수만 사용할 수 있는 것이다. 우리가 나중에 멀티 쓰레드를 이용해 프로그램을 짤 때에는 단순히 number++ 만을 하지는 않을 것이다. 따라서 특정 신호를 주어서 사용자가 정한 블록 안의 내용은 하나의 쓰레드만 실행하도록 제어할 수 있는 도구가 필요할 것이다. 먼저 소스코드 내 가상의 선을 긋는다고 생각하자. 이 영역은 아무도 접근할 수 없으며, 내가 먼저 점유할 경우 다른 쓰레드는 얼씬도 하지 못한다. 라고 생각하자. class Program { static int number = 0;..

데드락(Deadlock)이란?

1. 데드락(deadlock)의 개념 데드락(교착 상태)은 멀티프로세스나 멀티스레드 환경에서 발생하는 문제 중 하나입니다. 데드락이란 각 프로세스나 스레드가 서로 상대방이 가진 자원을 사용하고 있기 때문에 더 이상 진행할 수 없는 상태를 말합니다. 즉, 각 프로세스가 다른 프로세스가 계속 진행하기 위해 필요한 리소스를 보유하고 있기 때문에 순환 의존성이 발생하여 어느 프로세스도 진행할 수 없는 상황이 발생합니다. 2. 데드락(deadlock)의 예제 데드락의 간단한 예는 두 프로세스인 A와 B가 모두 공유 리소스에 액세스해야 하지만 서로 다른 순서로 리소스를 획득하고 보유하는 시스템에서 발생할 수 있습니다. 프로세스 A가 리소스 X를 획득한 후 리소스 Y를 획득하려고 하고, 프로세스 B가 리소스 Y를 획..

공부/OS 2023.03.02
반응형