외부활동/JSCODE 자바

자바 4주차: 동시성 프로그래밍 기초(작성 중)

사랑우주인 2025. 1. 19. 01:11

Thread-Safe

멀티 스레드 환경에서 공유 자원에 여러 스레드가 접근이 이루어져도 프로그램이 정상적으로 동작하는 상태


synchronized

synchronized란?

lock을 통해 동기화를 수행하여 원자성 문제를 해결하는 키워드

문제점

한 스레드가 lock을 얻어서 임계 영역에 접근하면 해당 영역에 접근하고 싶은 모든 스레드가 blocking이 걸려 아무 일도 못하며 스레드 상태를 변경하는 비용때문에 성능이 좋지 않다.

  • 성능 저하(락 대기)
  • 데드 락
  • 공정성 문제 -> 기아 상태(starvation)

동기화 매커니즘

  • 모니터 락을 사용하여 스레드 간 동기화 제공
  • 객체의 락은 한번에 하나의 스레드가 점유

임계 영역(Critical Section)

멀티스레드 환경에서 공유 자원에 접근하는 코드 블록

모니터

모니터는 스레드가 mutual exclusion와 cooperation를 가질 수 있도록 하는 동기화 메커니즘이다. 모니터라고 부르는 이유는 스레드가 리소스에 어떻게 접근(access)하는지 모니터링하기 때문이다.

상호배제? 협력?

  • 상호 배제
    • 공유 자원에 여러 스레드가 동시에 접근하지 못하도록 보장하는 매커니즘
    • 데이터 무결설 보장
  • 협력
    • 여러 쓰레드가 작업을 수행하기 위해 서로 신호를 주고받거나 대기 상태를 조율하는 메커니즘
    • 즉, 한 스레드가 특정 조건을 만족해야만 다른 스레드가 실행

꼬리 질문
모니터?
스레드 상태 변경?
뮤텍스? 세마포어?
wait()? notify()?