아래 코드는 멀티 스레드 환경에서 문제가 발생한다.
users
객체가 공유변수이기 때문이다.
위와 같은 공유 상태에서 발생하는 문제를 해결하기 위해 코루틴에서는 싱글 스레드로 제한된 Dispatcher
를 사용하는 방식을 제공한다. (다른 방식도 있으나 이 방식이 가장 많이 사용됨)
이와 관련해 두가지 방식을 제공한다.
함수 전체를 래핑하는 방식으로 코드가 간단해진다.
공유 자원의 상태를 변경하는 코드인 경우 이 방식을 사용한다.
공유될 가능성이 있는 자원을 atomic 타입으로 선언해 해결하는 방법이다.
하나의 변수나 레퍼런스는 보장 가능하나 2개 이상일 경우 문제가 발생한다.