commonMain.internal.Synchronized.common.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of kotlinx-coroutines-core
Show all versions of kotlinx-coroutines-core
Coroutines support libraries for Kotlin
/*
* Copyright 2016-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
package kotlinx.coroutines.internal
import kotlinx.coroutines.*
import kotlin.contracts.*
/**
* @suppress **This an internal API and should not be used from general code.**
*/
@InternalCoroutinesApi
public expect open class SynchronizedObject() // marker abstract class
/**
* @suppress **This an internal API and should not be used from general code.**
*/
@InternalCoroutinesApi
public expect inline fun synchronizedImpl(lock: SynchronizedObject, block: () -> T): T
/**
* @suppress **This an internal API and should not be used from general code.**
*/
@OptIn(ExperimentalContracts::class)
@InternalCoroutinesApi
public inline fun synchronized(lock: SynchronizedObject, block: () -> T): T {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return synchronizedImpl(lock, block)
}