serversim
학습시뮬레이터템플릿가격
…
…
메뉴 열기
학습↗시뮬레이터↗템플릿↗가격↗
내 Documents문서
전체 목차/2장/2.37 / 40

2.3 · 프로세스와 동시성

스레드 안전 코드는 어떻게 만들까?

두 스레드가 동시에 count++를 하면 왜 한 번이 사라질 수 있을까요?

count++는 실제로 읽기, 더하기, 쓰기의 세 동작이라 중간에 다른 스레드가 끼어들 수 있습니다.

먼저 생활 비유

공용 화이트보드의 숫자

두 사람이 동시에 10을 읽고 각자 11을 써버리면 두 번 더했지만 결과는 11입니다.

컴퓨터 예제로 바꾸기

방문자 수 증가

count = count + 1;

잠금으로 한 사람씩 쓰게 하거나, 원자적 증가 연산을 사용해 읽기와 쓰기를 하나처럼 처리합니다.

직접 움직여 보기1 / 5

지금 일어나는 변화

둘 다 10 읽기

스레드 A와 B가 같은 이전 값을 봅니다.

실행권과 상태실행 · CPU 차례대기 · 메모리 · 운영 체제둘 다 10 읽기단계 1각자 11 계산단계 211 쓰기단계 3다시 11 쓰기단계 4잠금·원자 연산단계 5count 값현재: 둘 다 10 읽기

이 그림에서 기억할 한 문장

스레드 안전은 “동시에 실행돼도 공유 상태가 약속을 깨지 않는가”의 문제입니다.

현재 상태

이동하는 것
count 값
현재 위치
둘 다 10 읽기
다음 위치
각자 11 계산

30초 확인 문제

count++에 경쟁 조건이 생기는 핵심 이유는?

처음 보는 용어 두 개

경쟁 조건
실행 순서에 따라 결과가 달라지는 오류
임계 구역
공유 상태를 안전하게 보호해야 하는 코드 구간

이 절을 다 읽었다면

스레드 안전은 “동시에 실행돼도 공유 상태가 약속을 깨지 않는가”의 문제입니다.

← 이전 절

2.2 스레드는 무엇을 공유하고 무엇을 따로 가질까?

다음 절 →

2.4 코루틴은 함수와 무엇이 다를까?