1. 들어가며
- 프로그래밍을 하다보면 현실과 타협해야하는 경우가 있다.
- 프로그램이 컴퓨터에서 올바르게 실행되는 것을 확인하는 것이 먼저이고, 더 빨리 실행되도록 최적화 하는 일은 그 후에 고민해야 한다.
- 그래서 효율적인 동시성을 다루는 이번 장도 동시성을 완벽하게 보장하는 법을 이야기 한 다음 이를 토대로 효율을 더 높이는 흐름으로 진행해본다.
2. 스레드 안전성
스레드 안전이 뭐냐?
- 특별한 스레드 스케줄링이나 대체 실행 수단을 고려할 필요가 없다.
- 추가적인 동기화 수단이나 호출자 측에서의 조율이 필요 없다.
이 두가지를 만족한다면 스레드 안전하다라고 할 수 있다.
근데 스레드 안전 정도에도 단계가 있다.
- 불변
- 호출자가 동기화를 하지 않아도 되는 단계
- 호출자가 동기화 처리를 하면 스레드 안전한 단계
- 아예 멀티 스레드 상황에서 쓰면 안되는 단계