...

/

Mutex and Sidekick Channel Design Pattern

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 = 0
val 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 ...