Deadlocks, Livelocks, and Starvation
Deadlocks
= program in which all concurrent processes are waiting on one another.
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
ch1 := make(chan int)
ch2 := make(chan int)
wg.Add(1)
go func() {
defer wg.Done()
// Attempting to send data to ch2, but no one is receiving.
ch2 <- 42
}()
wg.Add(1)
go func() {
defer wg.Done()
// Attempting to send data to ch1, but no one is receiving.
ch1 <- 23
}()
wg.Wait()
}Livelocks
= programs that are actively performing concurrent operations, but these operations do nothing to move the state of the program forward.
Starvation
= any situation where a concurrent process cannot get all the resources it needs to perform work.
Last updated
Was this helpful?