07/04/2020 - GO
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.
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)
}
}
Ping 1
Pong 2
Ping 3
Pong 4
Ping 5
Pong 6
Ping 7
Pong 8
Ping 9
Pong 10
Ping 11
Pong 12
...
...
...