[java] 문자열 클래스와 스레드 동기화

박광현·2023년 11월 30일
0

Java

목록 보기
5/9

문자열 클래스

https://12bme.tistory.com/42

스레드 동기화

https://ittrue.tistory.com/173

데드락과 스레드 동기화

스레드 동기화는 데드락을 직접적으로 예방하는 것은 아닙니다. 스레드 동기화는 공유 자원에 대한 동시 액세스를 조절하고, 데이터 일관성을 보장하며, 경쟁 조건을 방지하는 데 중점을 둡니다. 그러나 데드락은 다르게 발생하며, 락을 사용하거나 스레드 동기화 메커니즘을 사용하더라도 여전히 발생할 수 있습니다.

데드락은 프로그램에서 두 개 이상의 스레드나 프로세스가 서로가 가진 자원을 얻기 위해 무한히 대기하는 상태를 말합니다. 스레드 동기화는 공유 자원에 대한 안전한 액세스를 보장하기 위해 사용되지만, 락을 효과적으로 사용하지 않으면 데드락이 발생할 수 있습니다.

데드락을 방지하려면 다음과 같은 접근 방법을 사용할 수 있습니다:

  • 상호 배제 (Mutual Exclusion): 락을 통해 한 번에 하나의 스레드만이 공유 자원에 접근할 수 있도록 합니다.
  • 점유 대기 (Hold and Wait): 다른 자원을 소유한 상태에서 추가 자원을 얻기 위해 대기하지 않도록 합니다.
  • 비선점 (No Preemption): 다른 스레드가 이미 소유한 자원을 강제로 빼앗지 않도록 합니다.
  • 순환 대기 (Circular Wait): 자원을 기다리는 스레드 간에 순환 대기가 발생하지 않도록 합니다.
    스레드 동기화는 주로 상호 배제를 통해 데드락을 방지하는 데 도움이 됩니다. 하지만 스레드 동기화만으로는 다른 데드락 요소들을 방지하기 위해 추가적인 주의가 필요합니다.

요약
스레드 동기화는 데드락의 조건 중 상호 배제에 효과적이지만 데드락은 여전히 발생할 수 있다.
임계 영역을 설정해주고 락 시스템을 이용하면 교착상태(데드락)을 방지 할 수 있지 않을까? 라고 생각했지만 조금 더 까다로운 녀석인 것 같다.
데드락의 추가적인 정보는 추후에

++
동기화는 보통 같은 객체(동일 자원) 사용에 mutex설정을 하는 것임 동기화 하는 대상이 무엇임이 중요함
다른 객체끼리도 같은 메서드 사용에 제한을 주려면 생산자에서 lock을 받고 객체 생성시에 lock을 줘서 동일한 lock을 사용하게 하고 메서드에 lock을 동기화 해야 함.

또한 semaphore를 사용해서 특정 코드 영역에 진입가능한 스레드 갯수를 설정가능함

자바에 사용할 수 있는 여러 동기화를 통해 자원을 효율적으로 관리하여 멀티스레드 환경을 구축하는 것이 중요해보임.

profile
코린이의 개발 공부

0개의 댓글