https://ittrue.tistory.com/173
스레드 동기화는 데드락을 직접적으로 예방하는 것은 아닙니다. 스레드 동기화는 공유 자원에 대한 동시 액세스를 조절하고, 데이터 일관성을 보장하며, 경쟁 조건을 방지하는 데 중점을 둡니다. 그러나 데드락은 다르게 발생하며, 락을 사용하거나 스레드 동기화 메커니즘을 사용하더라도 여전히 발생할 수 있습니다.
데드락은 프로그램에서 두 개 이상의 스레드나 프로세스가 서로가 가진 자원을 얻기 위해 무한히 대기하는 상태를 말합니다. 스레드 동기화는 공유 자원에 대한 안전한 액세스를 보장하기 위해 사용되지만, 락을 효과적으로 사용하지 않으면 데드락이 발생할 수 있습니다.
데드락을 방지하려면 다음과 같은 접근 방법을 사용할 수 있습니다:
요약
스레드 동기화는 데드락의 조건 중 상호 배제에 효과적이지만 데드락은 여전히 발생할 수 있다.
임계 영역을 설정해주고 락 시스템을 이용하면 교착상태(데드락)을 방지 할 수 있지 않을까? 라고 생각했지만 조금 더 까다로운 녀석인 것 같다.
데드락의 추가적인 정보는 추후에
++
동기화는 보통 같은 객체(동일 자원) 사용에 mutex설정을 하는 것임 동기화 하는 대상이 무엇임이 중요함
다른 객체끼리도 같은 메서드 사용에 제한을 주려면 생산자에서 lock을 받고 객체 생성시에 lock을 줘서 동일한 lock을 사용하게 하고 메서드에 lock을 동기화 해야 함.
또한 semaphore를 사용해서 특정 코드 영역에 진입가능한 스레드 갯수를 설정가능함
자바에 사용할 수 있는 여러 동기화를 통해 자원을 효율적으로 관리하여 멀티스레드 환경을 구축하는 것이 중요해보임.