Rumah >pembangunan bahagian belakang >Golang >pemasangan penyegerakan golang

pemasangan penyegerakan golang

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBasal
2023-05-16 12:59:40744semak imbas

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:pemasangan linux golangArtikel seterusnya:pemasangan linux golang