Golang (Go)
goroutines (based on CSP) and deadlock
The following code deadlocks.
$ go run deadlock.go
package main
import "fmt"
import "time"
func Send(ch chan<- int) { ch <- 42 }
func Recv(ch <-chan int, done chan<- int) {
val := <-ch
done <- val
}
func Work() {
for {
fmt.Println("Working..")
time.Sleep(1 * time.Second)
}
}
func main() { // main
ch, done := make(chan int), make(chan int)
go Send(ch)
go Recv(ch, done)
go Recv(ch, done)
go Work() // comment this out for complete deadlock detection
<-done // First receive
<-done // Second receive, mismatched relative deadlock