Mutex and Sidekick Channel Design Pattern
Learn how to implement Mutex and the Sidekick Channel design pattern in Kotlin.
We'll cover the following...
Mutex
Mutex, also known as mutual exclusions, provides a means to protect a shared state that can be accessed by multiple coroutines at once.
Let’s start with the same old dreaded counter
example, where multiple concurrent tasks try to update the same counter
:
var counter = 0val jobs = List(10) {async(Dispatchers.Default) {repeat(1000) {counter++}}}jobs.awaitAll()println(counter)
Using coroutines to increment a counter 1000 times in each of 10 coroutines
As you’ve probably guessed, the result that is printed is less than 10,000— totally embarrassing!
To solve this, we can introduce a locking mechanism that will allow only a single coroutine to interact with ...