코틀린 코루틴(13)
Final counter value: 1587
1. 현재 number 값을 읽는다.
2. number 값을 1 증가시킨다.
3. 증가된 값을 number에 반영한다.
Final counter value = 1000
1. 데이터 경합이 발생했는가?
2. 원자성이 보장되는가?
thread DefaultDispatcher-worker-1 @coroutine#2 counter = 1
thread DefaultDispatcher-worker-1 @coroutine#3 counter = 2
...(중략)...
thread DefaultDispatcher-worker-19 @coroutine#1001 counter = 995
thread DefaultDispatcher-worker-9 @coroutine#1000 counter = 994
thread DefaultDispatcher-worker-5 @coroutine#999 counter = 993
Final counter value = 995
thread DefaultDispatcher-worker-1 @coroutine#2 counter = 1
thread DefaultDispatcher-worker-1 @coroutine#3 counter = 2
...(중략)...
thread DefaultDispatcher-worker-7 @coroutine#1001 counter = 999
thread DefaultDispatcher-worker-7 @coroutine#999 counter = 1000
Final counter value = 1000
- 원자성은 특정 작업을 하나의 단위로 보는 것이다.
- 원자성을 보장한다는 것은 그 작업을 동시에 하지 못하게 하는 것이다.
- 다수의 스레드가 동시에 공유 자원을 사용할 때 원자성이 보장되지 않으면 데이터 경합이 발생한다.
- 단일 스레드에서 동작하는 코루틴은 데이터 경합이 발생하지 않는다.
- 코루틴의 데이터 경합을 방지하는 방법은 스레드에서 사용하는 방법과 다를 바 없다.
- 공유 자원에 접근하는 작업 영역을 임계 구역이라고 한다.
- 코루틴은 상호 배제를 위한 Mutex를 지원한다.