Lo multiplataforma bloqueo o enfoque de sincronización debe ser utilizado en múltiples plataformas de código Kotlin? Anteriormente en código Java i utilizado synchronized
y puedo ver synchronized
en Kotlin también. Sin embargo, es marcado como obsoleto y se eliminará de common
lib std pronto.
Puedo ver withLock
, pero está apoyado en JVM solamente, no multiplataforma.
¿Alguna idea?
PD. Por ahora no queremos migrar a corrutinas Kotlin debido al exceso de reescritura y corrutinas huella de la biblioteca (demasiado grande para la biblioteca de Android con los estrictos requisitos de huella de disco).
A partir de la documentación Kotlin / Nativo Concurrente ( aquí ):
Concurrencia en Kotlin / Nativo
Kotlin / tiempo de ejecución nativo no fomenta un modelo de concurrencia orientada hilos clásico con bloques de código que se excluyen mutuamente y variables condicionales, ya que este modelo es conocido por ser propenso a errores y poco fiable. En su lugar, se sugiere un conjunto de enfoques alternativos, lo que permite utilizar la concurrencia de hardware e implementar el bloqueo de IO. Esos enfoques son los siguientes, y serán detallados en los registros secciones adicionales:
- Los trabajadores con el paso de mensajes
- Objeto de transferencia de la propiedad subgrafo
- Objeto subgrafo congelación
- Objeto subgrafo desprendimiento
- Prima la memoria compartida usando variables globales C
- Corrutinas para las operaciones de bloqueo (no cubiertos en este documento)
Parece que los bloqueos no se exponen en Kotlin / nativo por diseño. No son implementaciones (ver Lock.kt ), sin embargo, que la clase está marcado internal
.
Sin embargo , hay una implemenation multi-plataforma de cerraduras en KTOR (muy limitado doc , código fuente ). Es pública, pero marcado con @InternalApi
, lo que puede afectar su estabilidad.
Usted también puede estar interesado en este hilo de discusión KotlinLang: Reemplazo para sincronizado