Herkese merhaba!

Uzun yıllardır bol miktarda kişisel zaman ve enerji harcayarak bilgimizi hepinizle paylaşıyoruz. Ancak şu andan itibaren bu blogu çalışır durumda tutabilmek için yardımınıza ihtiyacımız var. Yapmanız gereken tek şey, sitedeki reklamlardan birine tıklamak olacaktır, aksi takdirde hosting vb. masraflar nedeniyle maalesef yayından kaldırılacaktır. Teşekkürler.

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
...
...
...