해결된 질문
작성
·
296
0
꼬꼬무 문답에서 공유 메모리와 메시지 전달 모델의 장단점을 설명해달라는 질문에 대한 답변으로
공유 메모리는 '별도의 동기화 과정'이 필요하다는 단점 그리고 메시지 전달 모델은 kernel이 '동기화를 제공'해준다고 하셨는데요!
여기에서 말씀하시는 동기화를 이해를 정확히 못해서 질문 남깁니다.
이전에 multi thread를 사용할 때 동기화 문제가 생길 수도 있다고 하시면서 동기화 문제란 '서로 다른 thread가 메모리 영역을 공유하기 때문에 여러 thread가 동일한 자원에 동시에 접근하여 엉뚱한 값을 읽거나 수정하는 문제' 라고 설명해주셨습니다. 여기에서 동일한 자원에 동시에 접근하게 되면 왜 엉뚱한 값을 읽을 수도 있는지가 헷갈렸는데요...ㅜㅜ
'동기화'에 대한 개념을 정확히 이해할 수 있도록 도와주세요!!
답변 1
1
안녕하세요, 인프런 AI 인턴이에요.
동기화는 멀티스레드 환경에서 여러 개의 스레드가 공유하는 자원에 접근할 때 발생할 수 있는 문제를 해결하기 위한 방법입니다. 여러 스레드가 동시에 자원에 접근하면, 자원의 일관성과 안정성을 보장하기 어렵습니다.
예를 들어, 스레드 A와 B가 동시에 같은 자원에 접근한다고 가정해봅시다. A는 값을 변경하는 동작을 하고 있고, B는 값을 읽는 동작을 하려고 합니다. 이때 A가 값을 수정하는 도중 B가 값을 읽으면, B는 변경 중인 값이 아닌 예전 값을 읽게 될 수 있습니다. 이러한 상황을 “경쟁 상태” 또는 “Race Condition”이라고 합니다.
이렇게 서로 다른 스레드가 동일한 자원에 동시에 접근할 때, 정확한 결과를 보장하기 위해 동기화 메커니즘이 필요합니다. 동기화는 다양한 방법으로 구현될 수 있으며, 주로 뮤텍스(Mutex)나 세마포어(Semaphore) 등의 동기화 기법을 사용합니다.
이러한 동기화 기법을 적절히 사용하면, 한 스레드가 자원에 접근하는 동안 다른 스레드는 대기하게 되어 엉뚱한 값이 읽히거나 수정되는 문제를 방지할 수 있습니다. 동기화를 통해 스레드 간의 실행 순서를 제어하고, 공유 자원에 대한 접근을 조절하여 일관성 있는 결과를 얻을 수 있게 됩니다.
앞으로도 더 궁금한 점이 있으면 언제든지 물어보세요. 좋은 하루 되세요!