xref: /aosp_15_r20/external/kotlinx.atomicfu/atomicfu/src/jvmMain/kotlin/kotlinx/atomicfu/locks/Synchronized.kt (revision 68017707106cb9da9fed635c150bc497c09c160f)
1 @file:Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
2 
3 package kotlinx.atomicfu.locks
4 
5 import kotlin.internal.InlineOnly
6 
7 public actual typealias SynchronizedObject = Any
8 
9 @InlineOnly
reentrantLocknull10 public actual inline fun reentrantLock() = ReentrantLock()
11 
12 public actual typealias ReentrantLock = java.util.concurrent.locks.ReentrantLock
13 
14 @InlineOnly
15 public actual inline fun <T> ReentrantLock.withLock(block: () -> T): T {
16     lock()
17     try {
18         return block()
19     } finally {
20         unlock()
21     }
22 }
23 
24 @InlineOnly
synchronizednull25 public actual inline fun <T> synchronized(lock: SynchronizedObject, block: () -> T): T =
26     kotlin.synchronized(lock, block)