아래 코드는 멀티 스레드 환경에서 문제가 발생한다.

users 객체가 공유변수이기 때문이다.

Untitled

위와 같은 공유 상태에서 발생하는 문제를 해결하기 위해 코루틴에서는 싱글 스레드로 제한된 Dispatcher를 사용하는 방식을 제공한다. (다른 방식도 있으나 이 방식이 가장 많이 사용됨)

이와 관련해 두가지 방식을 제공한다.

싱글 스레드로 제한된 Dispatcher

코스 그레인드 한정

함수 전체를 래핑하는 방식으로 코드가 간단해진다.

Untitled

파인 그레인드 스레드 한정

공유 자원의 상태를 변경하는 코드인 경우 이 방식을 사용한다.

Untitled

Atomic 타입 활용

공유될 가능성이 있는 자원을 atomic 타입으로 선언해 해결하는 방법이다.

하나의 변수나 레퍼런스는 보장 가능하나 2개 이상일 경우 문제가 발생한다.

Untitled