22.10.03 19:14 작성
·
288
0
데드락은 서로 락을 걸어버려 상대가 락을 풀때까지 하염없이 기다리는 상태
먼저 AccountManager에서 ProcessLogin이 먼저 실행이 되었다고 가정했을 때 lock_guard를 사용하여 ProcessLogin이 끝날 때까지 다른 쓰레드의 AccountManager 접근을 막아버린다. 그와 거의 동시에 UserManager의 ProcessSave도 실행이 되면서 ProcessSave를 실행하는 쓰레드가 다른 쓰레드의 접근을 막아버린다. 이 때 ProcessLogin에서 UserManager::Inst()->GetUser를 실행하면 다른 쓰레드에서 UserManager에서 접근하지 못하도록 락을 걸고 GetUser를 실행해야 하는데 먼저 ProcessSave에서 user lock을 걸었기 때문에 추가적인 락을 하지 못하게 된다.
또 GetAccount를 실행할 때도 ProcessLogin에서 먼저 account lock을 걸었기 때문에 GetAccount에서 lock_guard를 하지 못하고 멈춰서 다른 곳에서 account lock을 풀어줄 때까지 하염없이 기다리게 된다.
안녕하세요 강사님
이렇게 이해를 했는데 맞는지 궁금합니다!
답변 1
5
2022. 10. 03. 21:07
안녕하세요!
맞기는 하지만, [이해한 것이 맞는지~]는 질문 대상이 아닙니다!
왜냐하면 어차피 그것에 일일히 대답해줄 사람은 앞으로도 없기 때문이죠.
제가 기술 책을 읽으면서 사용하는 방법은,
이해한 것을 진리로 생각하고 일단은 납득하고 넘어가는 것인데요.
언젠가 그게 사실이 아니라서 틀리다면, 틀린대로 또 새로운 깨우침을 얻게 됩니다.