[C++/멀티스레딩] lock 순서

kimyb·2023년 1월 10일

멀티스레드에서 락(lock)을 사용할 때, 락을 어떤 순서로 획득하느냐는 데드락(deadlock)을 방지하고 프로그램의 안정성을 유지하는 데 정말 중요하다. 일반적으로 lock을 얻는 순서에 몇 가지 규칙이 있다

  1. 일관된 순서:

    • 모든 스레드가 동일한 락 획득 순서를 따라야 합니다. 이것은 시스템 전체에서 일관성을 유지할 수 있다.
  2. 중첩된(nested) lock 피하기:

    • 두 개 이상의 락을 중첩하려는 시도는 가급적 피해야 한다. 중첩된 락은 데드락 가능성을 증가시킴.
    • 하나의 스레드에서 이미 획득한 락을 다시 획득하지 않아야 한다.

ex) 두 개의 lock A와 B가 있다면, 모든 스레드는 같은 규칙에 따라 lock을 획득해야 한다:

  • lock A를 먼저 획득하고 나서 lock B를 획득할 수 있다.
  • lock B를 획득한 스레드는 lock A를 획득하기 전까지 대기해야 한다.

이러한 락 획득 순서 규칙을 따르면 데드락을 예방하고 안정성을 확보할 수 있지만, 모든 상황에서 동일한 락 순서를 사용할 수 있는 것은 아니며, 프로그램의 구조에 따라 lock 순서를 조정해야 할 수도 있다.

profile
공부했던것을 정리.

0개의 댓글