0. 들어가며
<aside>
💡
동시성 프로그래밍에서는 결론적으로 Shared Data 접근을 동기화할 필요성이 있음
</aside>
- 문제점
- 일반적인 순차적 형태의 프로그램에서는 발생하지 않는 복잡한 문제들을 야기
1. Thread 안전성
<aside>
💡
Thread-Safe Function
- 여러 개의 스레드가 동시에 호출되어도 항상 올바른 결과를 반환하는 함수
Thread-Unsafe Function
- 동시 호출 시 잘못된 결과를 반환할 수 있는 함수
</aside>
<aside>
💡
Thread-Unsafe Function의 4가지 유형
</aside>
Class 1 : 공유 변수를 보호하지 않는 함수
- 예시
- 동기화 없이 Global Counter 값 변경
- 해결 방법
- 공유 변수를 P와 V와 같은 동기화 연산으로 보호
- 👍 Pros
- 호출하는 프로그램에는 아무 변경도 할 필요가 없음
- 👎 Cons
Class 2 : 다중 호출에 대해 상태(State)를 유지하는 함수
rand.c
code (출처 : CSAPP Fig. 12.37)
- 예시
- PseudoRandom Number Generator Package
- 현재 호출의 결과가 이전 반복 실행으로부터의 중간 결과에 의존
- 해결 방법
static
데이터를 제거하고, 상태 정보를 함수의 param
으로 전달하도록 코드 수정