Race condition

hi2li·2026년 4월 15일

여러 프로세스(또는 스레드)가 동시에 같은 자원에 접근할 때,

실행 순서에 따라 결과가 달라지는 상태

→ 누가 먼저 실행하느냐에 따라 결과가 바뀜

핵심 조건

  1. 공유 자원 존재
  2. 동시에 접근
  3. 순서 제어 없음

해결방법

  • mutex(락)
    • 한 번에 한 스레드만 자원 접근 허용
    • 사용할 때는 lock, 작업 후 unlock
    • 동시에 접근을 하지 못하게 하여 순서가 정상적으로 됨
  • semaphore
    • 동시에 접근 가능한 개수를 제한하는 카운터
    • 3으로 설정하면 접근할 떄마다 1이 감소되고 카운터가 0이면 대기
    • 접근 수를 제한해서 충돌 가능성을 줄이고 제어할 수 있다.
  • synchronized
    • 코드 작성시 코드 블록에 락을 걸어 해당 블록에는 한 번에 한 쓰레드만 접근하고 실행할 수 있게 한다.
    • 주로 자바에서 사용한다.
  • atomic연산
    • 쪼개지지 않고 한 번에 실행되는 연산
    • 시작하면 중간에 다른 스레드가 끼어들지 못하고 실행시킨다.
profile
easy come , easy go

0개의 댓글