Bu örnekte, sync mutex paketi ile bir "ping/pong" oyunu oluşturacağız. Topa her saniye sonsuz bir şekilde ping atmak ve pong atmak için ayrılmış iki goroutines olacaktır. Birbirleriyle iletişim halinde olmak zorunda değiller, o nedenle kanal kullanmak gereksiz. Bunun yerine, paylaşılan bir değişkeni kullanacağız ve çakışmalardan kaçınmak için, her birine sırayla değişkene erişmelerine izin vereceğiz.


Örnek


package main

import (
"fmt"
"sync"
"time"
)

type Ball struct {
hit int
mux sync.Mutex
}

func (b *Ball) Ping() {
b.mux.Lock()
defer b.mux.Unlock()

b.hit++
fmt.Println("Ping", b.hit)
}

func (b *Ball) Pong() {
b.mux.Lock()
defer b.mux.Unlock()

b.hit++
fmt.Println("Pong", b.hit)
}

func main() {
ball := &Ball{}
for {
ball.Ping()
time.Sleep(1 * time.Second)
ball.Pong()
time.Sleep(1 * time.Second)
}
}

Test


Ping 1
Pong 2
Ping 3
Pong 4
Ping 5
Pong 6
Ping 7
Pong 8
Ping 9
Pong 10
Ping 11
Pong 12
...
...
...