oshai
10/18/2017, 9:42 PMclass Semaphore(permits: Int) {
private val inner = java.util.concurrent.Semaphore(permits)
suspend fun acquire() {
return suspendCoroutineOrReturn { _ ->
if (inner.tryAcquire()) {
Unit
} else {
COROUTINE_SUSPENDED
}
}
}
fun release() = inner.release()
}
fun main(args: Array<String>) = runBlocking {
val s = Semaphore(1)
s.acquire()
println("acquired")
s.release()
}