TransferMode
enum class TransferMode
Примечание: современный менеджер памяти Kotlin/Native позволяет обмениваться объектами между потоками без дополнительных церемоний, поэтому TransferMode имеет эффект только в устаревшем менеджере памяти.
Основы передачи объектов.
Объекты могут передаваться между потоками в одном из двух возможных режимов.
- БЕЗОПАСНЫЙ - подграф объекта проверяется на отсутствие достижимости другими глобальными или локальными переменными, и передаётся, если это так, в противном случае генерируется исключение
- НЕБЕЗОПАСНЫЙ - объект слепо передаётся другому потоку, если в передающем потоке остались ссылки - это может привести к сбою или неправильной работе программы
Режим «Безопасный» проверяет, не используется ли объект в передающем потоке, используя специфичный для управления памятью алгоритм (реализация ARC полагается на пробное удаление в графе объектов, укоренённом в передаваемом объекте), и генерирует исключение IllegalStateException, если граф объектов, укоренённый в передаваемом объекте, достижим каким-либо другим способом.
Режим «Небезопасный» предназначен для наиболее критически важных с точки зрения производительности операций, где предполагается корректность владения графом объектов (например, приложение отлажено ранее в режиме «Безопасный»), просто передаёт владение без дальнейшей проверки.
Обратите внимание, что в некоторых случаях необходимо выполнить сборку циклов, чтобы убедиться, что мёртвые циклы не влияют на достижимость переданного графа объектов.
См. также
kotlin.native.internal.GC.collect
Значения перечисления
БЕЗОПАСНЫЙ
Выполняется проверка достижимости.
НЕБЕЗОПАСНЫЙ
Проверка достижимости пропускается, что может привести к загадочным сбоям в приложении. ИСПОЛЬЗУЙТЕ РЕЖИМ «НЕБЕЗОПАСНЫЙ» ТОЛЬКО ЕСЛИ ВЫ СООБРАЖАЕТЕ, ЧТО ДЕЛАЕТЕ!!!
Свойства
значение
val value: Int
© 2010–2023 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.native.concurrent/-transfer-mode/index.html