Concurrency Risk

겉보기 한 줄도 원자적이지 않을 수 있다

공유 상태를 읽고, 판단하고, 다시 쓰는 사이에 다른 스레드가 끼어들면 결과가 달라진다.

Read Modify Write

증가 연산

counter = counter + 1;

읽기, 더하기, 쓰기가 분리되면 한쪽 증가분이 사라질 수 있다.

확인 후 실행

확인 후 사용

if (!ready) init();

두 스레드가 동시에 false를 보면 초기화가 중복 실행될 수 있다.

Shared Container

순회 중 변경

for (item in list) use(item);

다른 스레드가 목록을 바꾸면 누락, 중복, 잘못된 참조가 생긴다.