Mutex and Sidekick Channel Design Pattern
Explore how to use Mutex to protect shared state in concurrent Kotlin coroutines and discover the Sidekick Channel design pattern to offload work between actor coroutines. This lesson helps you handle synchronization safely and manage workload distribution effectively.
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)
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 the variable at once, making the operation atomic ...