멀티스레드 문제 경험·해결 방법 중심으로 푸는 결
멀티스레드 프로그래밍을 구현하면서 겪었던 문제는 경쟁 조건(race condition)이었습니다.
학부 운영체제 수업 과제에서 Java로 공유 자원에 여러 스레드가 동시에 접근하는 구조를 만들었을 때, 실행할 때마다 결과값이 달라지는 상황이 발생했습니다. 처음에는 로직 자체가 틀렸다고 생각했는데, 스레드 실행 순서가 보장되지 않아서 공유 변수 값이 덮어써지는 것이 원인이었습니다.
synchronized 키워드로 임계 구역을 보호하니 결과가 일관되게 나왔습니다. 이후 ReentrantLock을 써보면서 락의 범위를 더 세밀하게 조정할 수 있다는 것도 배웠습니다. 이 경험에서 멀티스레드는 실행 순서를 절대 가정하면 안 된다는 원칙을 몸으로 익혔고, 공유 자원이 생기는 순간 동기화 전략을 먼저 생각하는 습관이 생겼습니다.