동기화를 위한 하드웨어 지원
동기화를 위한 소프트웨어 지원
Peterson's Algorithm 등 소프트웨어 지원을 통해 동기화 할 수 있지만, 항상 올바르게 작동한다고 장담할 수 없다.
동기화를 위한 하드웨어 지원
- 메모리 베리어: 실행 시 앞의 모든
load(), store() 연산이 완전히 완료되어 메모리 반영된 후 그 뒤에 있는 load(), store()연산이 실행되도록 보장한다.
- 명령어 재배열로 인해 일관성이 깨질 수 있다. 어떤 메모리 보장을 제공할지는 CPU 아키텍쳐에 따라 달라지는데 보통 강결합, 약결합으로 구분한다.
- 강결합: 한 CPU의 메모리 수정이 다른 CPU에 즉시 보인다.
- 약결합: 한 CPU의 메모리 수정이 다른 CPU에 즉시 보임이 보장되지 않는다.
- CPU마다 모델이 달라 예측할 수 없는 문제를 메모리 베리어를 통해 해결할 수 있다.
- 원자적 명령: 한 내용을 검사하고 동시에 수정할 수 있다.
생각 정리
volatile 키워드란??
volatile 키워드가 붙은 데이터를 스레드가 읽거나 수정할 때 캐싱하지 않고, 직접 메인 메모리에 접근해 읽거나 쓰도록 하는 키워드다.
멀티코어일 때 어떻게 동기화가 이루어질까??
CAS나 메모리 베리어 삽입 등을 통해 동기화를 보장할 수 있다.
학습하며 정리한 글이기 때문에 혼용된 표현 또는 잘못된 내용이 있을 수 있습니다.
만약, 발견하신 경우 댓글을 통해 알려주신다면 진심으로 감사드립니다.