Concurrency in Go Chapter1 (5)

Deadlock

package mainimport (
"fmt"
"sync"
"time"
)
func main() {
type value struct {
mu sync.Mutex
value int
}
var wg sync.WaitGroup
printSum := func(v1, v2 *value) {
defer wg.Done()
v1.mu.Lock()
defer v1.mu.Unlock()
time.Sleep(2 * time.Second) v2.mu.Lock()
defer v2.mu.Unlock()
fmt.Printf("sum=%v\n", v1.value+v2.value)
}
var a, b value
wg.Add(2)
go printSum(&a, &b)
go printSum(&b, &a)
wg.Wait()
}

Mutufal Exclusion

  • プロセスが常時、あるリソースを排他的に獲得している

Wait For Condition

  • プロセスがあるリソースを確保しつつ、別のリソースを確保しようと待っている

No Preemption

  • あるプロセスに確保されているリソースはそのプロセスによってのみ開放される

Circular Wait

  • プロセス1がプロセス2を待ち、プロセス2がプロセス1を待っている

--

--

--

Software engineer

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Takanori Ishibashi

Takanori Ishibashi

Software engineer

More from Medium

Compilation process of ‘gcc’ function for C programs

Singapore must prepare for de-globalisation

CS373 Spring 2022: Elliot Sims

2022 BMW ECU programming and Diagnosis, which tool?

BMW ECU programming and Diagnosis