스레드 공유와 고유 상태

스레드는 주소 공간을 공유하고 실행 문맥을 따로 가진다

같은 프로세스 안의 스레드는 코드, 힙, 전역 데이터, 열린 파일 같은 프로세스 자원을 공유하지만, 각자 프로그램 카운터, 레지스터, 스택을 따로 갖습니다. 이 구분이 장점과 동기화 위험을 동시에 만듭니다.

01

프로세스 자원을 공유한다

여러 스레드는 같은 주소 공간을 쓰므로 데이터 전달 비용이 낮습니다.

shared space
02

실행 상태는 분리한다

각 스레드는 자기 호출 스택과 레지스터를 갖고 독립적인 실행 위치를 유지합니다.

context
03

동기화를 추가한다

공유 힙과 전역 데이터는 mutex, condition variable, atomic으로 접근 질서를 정해야 합니다.

sync
04

문맥 전환 비용 검토

프로세스보다 가볍지만 스케줄링, 캐시 오염, locking 비용은 여전히 존재합니다.

cost
공유 힙
빠른 협업과 race 위험이 함께 있음 공유 구조체를 수정하면 lock 범위가 정확해야 합니다.
heap
스택
함수 호출과 지역 변수는 스레드별로 분리 다른 스레드에 지역 변수 주소를 넘기면 수명 문제가 생길 수 있습니다.
stack
파일
열린 파일과 offset 공유 여부를 확인 동시에 write하면 순서와 원자성 정책을 알아야 합니다.
I/O

공유 목록 · 락 범위 · 종료 점검

공유 목록 스레드가 함께 읽는 값과 함께 쓰는 값을 따로 표시합니다.
락 범위 임계구역은 짧고 명확해야 deadlock과 대기 시간을 줄입니다.
종료 스레드가 끝날 때 join, detach, 자원 해제를 어떻게 할지 정합니다.