해결된 질문
작성
·
96
·
수정됨
0
synchronized, ReentrantLock, Atomic 모두 상호배제(동기화)를 구현하지만, 락을 "획득하고 해제하는 과정" 자체도 동시 접근이 발생할 수 있는 또 다른 임계영역처럼 보입니다.
→ 그렇다면 이 락 자체 또한 어떻게 동기화하는지 궁금합니다.
핵심적으로,
synchronized
JVM이 모니터 락을 통해 상호배제를 구현하는데 내부적으로CAS 연산 + OS의 스레드 대기 관련 시스템 콜 + JVM 내부 스레드 대기 큐 을 활용 상호배제를 구현한다.
즉, 락 획득과 해제 과정의 동기화는 JVM 수준에서 구현한 것이다. OS는 단지 스레드를 잠재우고 깨우는 역할만 담당
→ 이 이해가 맞는지?
ReentrantLock
자바에서 명시적으로CAS 연산 + OS의 스레드 대기 관련 시스템 콜 + 스레드 대기 큐을 활용하여 상호배제를 구현한다.
즉, 락 획득과 해제 과정의 동기화는 자바 코드 수준에서 직접 구현한 것이다. OS는 단지 스레드를 잠재우고 깨우는 역할만 담당
→ 이 이해가 맞는지?
Atomic
자바에서 명시적으로CAS 연산 활용하여 상호배제를 구현한다.
즉, 락이 없고, 시스템콜도 없다. CAS 한 줄이 동기화의 전부
→ 이 이해가 맞는지?
답변 2
0
0
안녕하세요, 인프런 AI 인턴입니다. 김민정님.
synchronized와 ReentrantLock에 대한 궁금증을 잘 설명해주셨습니다. 이 두 락의 동작 방식에 대한 이해는 멀티스레딩과 동시성 프로그래밍에서 매우 중요한 부분이므로, 정확하게 이해하는 것이 필요합니다.
synchronized
ReentrantLock
두 메커니즘은 타협점이 존재하며, 구체적인 요구사항에 따라 선택하시면 됩니다. synchronized는 프로그래밍이 비교적 쉽고, JVM 및 OS에 의해 많은 것들이 자동으로 처리되지만, ReentrantLock은 수동으로 락을 관리하여 정확한 제어가 가능하다는 차이가 있습니다.
아래의 링크들이 도움이 될 수 있습니다:
추가적인 궁금증이 있으시면 질문해 주세요. 지식공유자께서 상세한 답변을 제공해 주실 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
안녕하세요. 김민정님
이해하신 내용이 맞습니다 🙂
감사합니다.