Introduction of Sync.Mutex
Mutex or stands for Mutual Exclusion is a way to overcome race conditions in the Golang language. Mutex can be used to do locking
and unlocking
of a mutex so that if it is locked
it will not be able to do locking
again until we do unlocking
.
So if we have a goroutine doing lock
then the other goroutine will not be able to do lock
until the goroutine does unlock
, then the other goroutine can do lock
. This is very suitable or usually a solution when there is a race condition
problem faced when we are coding.
Still confused? Well later we will try further to this Mutex
creation sample.
The Race Condition
problem
We will try to create a simple code that makes the code have a Race Condition
. You can see the code below.
func main() {
var x int = 0
for i := 0; i < 1000; i++ {
go func() {
x++
}()
}
time.Sleep(500 * time.Microsecond)
fmt.Println("counter : ", x)
}
So, we see that the above code if run will issue println
with different counter values. Why is that? Because in the code there is a Race Condition
where the x
variable will simultaneously set and the last set is a different goroutine.
How to overcome Race Condition
with sync.Mutex
Then how to avoid the Race Condition
is one of them by using this Mutex
. Let’s change the code above and then add it with the use of Mutex
by looking at the additional code below.
func main() {
var x int = 0
var mu sync.Mutex
for i := 0; i < 1000; i++ {
go func() {
mu.Lock()
x++
mu.Unlock()
}()
}
time.Sleep(500 * time.Microsecond)
fmt.Println("counter : ", x)
}
When we run the above code, each output will be fixed at 1000, so the count is correct and not different from before we used sync.Mutex
.
So this is very useful if we are working on a count code that uses * goroutine* and setters into the same variable at the same time then we need to use sync.Mutex
as locking
and unlock
so that the variable count is correct and reliable.
How to Communication Golang with MSSQL Server
Hot Articles
12 Creating Static File Handler
01 Jan 2025
