From d3aa16361b734717b03ec885eaec665c93651ee6 Mon Sep 17 00:00:00 2001 From: Jakob Waibel Date: Thu, 29 Sep 2022 13:45:06 +0200 Subject: [PATCH] Mutex und Semaphore --- Mutex&Semaphore.pdf | Bin 0 -> 39115 bytes Mutex.kt | 62 ++++++++++++++++++++++++++++++++++++++++++++ Semaphore.kt | 14 ++++++++++ 3 files changed, 76 insertions(+) create mode 100644 Mutex&Semaphore.pdf create mode 100644 Mutex.kt create mode 100644 Semaphore.kt diff --git a/Mutex&Semaphore.pdf b/Mutex&Semaphore.pdf new file mode 100644 index 0000000000000000000000000000000000000000..309d0a05f236e0c314ab4e39575363b3b7696729 GIT binary patch literal 39115 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 literal 0 HcmV?d00001 diff --git a/Mutex.kt b/Mutex.kt new file mode 100644 index 0000000..88b90b2 --- /dev/null +++ b/Mutex.kt @@ -0,0 +1,62 @@ +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock +import kotlinx.coroutines.withContext +import kotlin.system.measureTimeMillis + +suspend fun massiveRun(action: suspend () -> Unit) { + val n = 100 // number of coroutines to launch + val k = 1000 // times an action is repeated by each coroutine + val time = measureTimeMillis { + coroutineScope { // scope for coroutines + repeat(n) { + launch { + repeat(k) { action() } + } + } + } + } + println("Completed ${n * k} actions in $time ms") +} + +var counter = 0 + +fun withoutMutex() = runBlocking { + withContext(Dispatchers.Default) { + massiveRun { + counter++ + } + } + println("Counter = $counter") +} + +val mutex = Mutex() +suspend fun x() { + mutex.lock() //suspends until mutex is unlocked + mutex.tryLock() //returns false if mutex is locked + mutex.unlock() //unlocks mutex + mutex.withLock { + + } +} + +fun withMutex() = runBlocking { + withContext(Dispatchers.Default) { + massiveRun { + mutex.withLock { + var c = counter + c +=1; + counter = c + } + } + } + println("Counter = $counter") +} + +fun main() { + withoutMutex() + //withMutex() +} diff --git a/Semaphore.kt b/Semaphore.kt new file mode 100644 index 0000000..c18fa0d --- /dev/null +++ b/Semaphore.kt @@ -0,0 +1,14 @@ +import kotlinx.coroutines.sync.Semaphore +import kotlinx.coroutines.sync.withPermit + +val semaphore = Semaphore(5, 5) + +suspend fun main() { + semaphore.acquire() //reduces available permits, suspends when none available + semaphore.tryAcquire() //returns False if no permit available + semaphore.release() //releases permit, possible after acquire + + semaphore.withPermit { + + } +}