쓰레드 세이프
- 여러 쓰레드에서 공통된 데이터를 조회 및 수정했을 때, 데이터가 깨지지 않음
- 중간상태없음
- 메모리가 깨지지 않음
- 경쟁상태에 있지 않은 것
예제
var counter = 0
fun add() {
counter ++
}
- add 함수가 여러쓰레드에서 동시에 불려졌을때 counter의 값이 깨질 수 있음
- counter ++는 여러가지 명령어의 집합체
- (추후 표 첨부)
주의 해야할 것
- 쓰레드 세이프 하다고 개발자가 호출한 순서 그대로를 보장한다는게 아님
- 쓰레드 세이프는 데이터의 원자성을 보장함
val uiState = MutableState<UiState>(UiState())
// 1번, delay는 연산이 오래걸리는 것을 명시적으로 처리
uiState.update { delay(200) it.copy() }
// 2번
uiState.update { dealy(100) it.copy() }
- 1번, 2번 호출을 했지만 최종 데이터 결과는 1번이다.