Kotlin Coroutinesで共有リソースに正しくアクセスする by Mori Atsushi

Kotlin Fest 2024
採択
ショート(20分)
Kotlin言語・プログラミング 中級者

Kotlin Coroutinesで共有リソースに正しくアクセスする

at_sushi_at Mori Atsushi at_sushi_at
1

Kotlin Coroutinesを使えば非同期処理を比較的簡単に書けますが、それでも複数のコルーチンから共有リソースにアクセスするときには最大限の注意を払う必要があります。

例えば、あるコルーチンで変数を読み込み、その値を元になにか操作を行い、結果をもとにその変数を上書きするとします。
その間に他のコルーチンによって値が書き換わることはないでしょうか?
その結果、予期せぬ不具合を引き起こしたりしないでしょうか?

正しく共有リソースを扱うためには、MutexやStateFlowのupdate関数など、それが考慮されたAPIをうまく組み合わせる必要があります。
また、1スレッドを使い回すディスパッチャと複数スレッドを使うディスパッチャがありますが、気をつけるべき点は異なります。
このセッションではどのようなコードで注意が必要なのか、また期待通りに動作させるための方法について紹介します。