который работает асинхронно, все его методы объявлены как suspend.
В сервисе колбасятся какие-то данные, и чтобы защитить их от гонок я заворачиваю все методы в mutex.withLock
В целом оно работает.
Однако проблема в том, что mutex не reentrant, то есть если скажем позвать один метод из другого, то настанет дедлок.
Это можно обойти, разделив методы на два класса: одни под локом, вторые без, первые зовут вторые.
Но не очень удобно.
Хочется reentrancy
У корутин другая философия, так что возможно придётся делать такую штуку самому. Ну или избавиться от shared mutable state.
Обсуждают сегодня