Golang ialah bahasa pengaturcaraan yang sangat popular sejak beberapa tahun kebelakangan ini, ia telah digunakan secara meluas dan mendapat perhatian yang semakin ramai. Di Golang, penyegerakan ialah perpustakaan standard yang sangat penting Ia menyediakan beberapa primitif penyegerakan, seperti mutex (kunci mutex), kunci baca-tulis (kunci baca-tulis), dll., untuk membantu pembangun mengurangkan konflik dalam mengunci sumber prestasi serentak program. Artikel ini akan memperkenalkan cara memasang dan menggunakan pustaka penyegerakan di Golang.
1. Persediaan
Sebelum memasang penyegerakan, anda perlu memasang persekitaran pembangunan Golang. Jika anda belum memasangnya lagi, sila pergi ke tapak web rasmi Golang (https://golang.org/dl/) untuk memuat turun pakej pemasangan Golang terkini dan ikut gesaan untuk memasangnya.
2. Pasang penyegerakan
1 Gunakan arahan go untuk memasang
Selepas memasang Golang, anda boleh menggunakan arahan go untuk memasang pustaka penyegerakan. Buka terminal dan laksanakan arahan berikut:
go get -u golang.org/x/sync/...
Arahan ini akan memuat turun dan memasang versi penyegerakan terkini dari semasa ke semasa perpustakaan kod dan semua perpustakaan lain yang bergantung padanya. Selepas melaksanakan arahan, anda boleh mula menggunakan perpustakaan penyegerakan dalam projek anda.
2. Muat turun kod sumber
Jika ralat berlaku semasa melaksanakan arahan di atas, atau anda lebih suka mengurus kebergantungan secara manual, anda juga boleh memuat turun kod sumber pustaka penyegerakan secara manual. Buka terminal dan laksanakan arahan berikut:
klon git https://github.com/golang/sync.git $GOPATH/src/golang.org/x/sync
Arahan ini akan bermula daripada Muat turun kod sumber daripada repositori GitHub perpustakaan penyegerakan dan letakkannya dalam direktori $GOPATH/src/golang.org/x/sync anda. Anda kemudian boleh merujuk kod dalam direktori ini dalam projek anda sendiri.
3. Gunakan penyegerakan
Selepas memasang pustaka penyegerakan, anda boleh menggunakan fungsi pustaka penyegerakan dalam projek Golang anda Berikut ialah beberapa kes penggunaan biasa:
1. Gunakan kunci mutex
Jenis penyegerakan.Mutex ialah penyegerakan primitif yang mudah tetapi sangat berguna, digunakan apabila berbilang urutan mengakses sumber kongsi. Ia memastikan bahawa hanya satu goroutine boleh mengakses bahagian kod yang dilindungi pada masa yang sama. Berikut ialah contoh penggunaan asas:
utama pakej
import (
"fmt" "sync"
)
taip Counter struct {
mux sync.Mutex // 互斥锁用于保护Counter的值 value int
}
func (c *Counter) Inc() {
c.mux.Lock() // 加锁,确保在修改Counter值的时候不会有其他goroutine同时访问 defer c.mux.Unlock() // 解锁 c.value++
}
func (c *Counter) Value() int {
c.mux.Lock() defer c.mux.Unlock() return c.value
}
func main() {
c := Counter{} var wg sync.WaitGroup for i := 0; i < 1000; i++ { wg.Add(1) // 启动一个goroutine前增加WaitGroup中的计数器 go func() { c.Inc() wg.Done() // goroutine结束时减小WaitGroup中的计数器 }() } wg.Wait() // 等待所有goroutine执行完成 fmt.Println(c.Value()) // 输出Counter的值
}
2 Gunakan kunci baca-tulis
segerak.Jenis RWMutex ialah jenis yang digunakan untuk mengoptimumkan proses pembacaan. Kunci data, yang membolehkan berbilang coroutine membaca sumber yang dikongsi pada masa yang sama tanpa konflik. Mengunci hanya diperlukan semasa menulis. Berikut ialah contoh penggunaan asas:
pakej utama
import (
"fmt" "math/rand" "sync" "time"
)
taip Cache struct {
data map[string]string mux sync.RWMutex // 读写锁用于保护Cache
}
func (c *Cache) Get(key string) string {
c.mux.RLock() // 加读锁 defer c.mux.RUnlock() // 解锁 return c.data[key]
}
func (c *Cache) Set(key, value string) {
c.mux.Lock() // 加写锁 defer c.mux.Unlock() // 解锁 c.data[key] = value
}
func main() {
c := Cache{data: make(map[string]string)} var wg sync.WaitGroup for i := 0; i < 200; i++ { wg.Add(1) go func() { defer wg.Done() key := fmt.Sprintf("%d", rand.Intn(10)) // 随机生成key value := fmt.Sprintf("%d", time.Now().Unix()) // 生成当前时间戳作为value c.Set(key, value) time.Sleep(50 * time.Millisecond) // 模拟耗时操作 fmt.Println(c.Get(key)) }() } wg.Wait()
}
Di atas ialah beberapa penggunaan asas pustaka penyegerakan, pustaka penyegerakan juga menyediakan lebih banyak penyegerakan bahasa primitif. Bagi pembangun yang ingin mempunyai pemahaman yang lebih mendalam tentang pengaturcaraan serentak Golang, adalah sangat penting untuk menguasai penggunaan perpustakaan penyegerakan.
Atas ialah kandungan terperinci pemasangan penyegerakan golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!