pemasangan penyegerakan golang

WBOY
Lepaskan: 2023-05-16 12:59:40
asal
691 orang telah melayarinya

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"
Salin selepas log masuk

)

taip Counter struct {

mux sync.Mutex // 互斥锁用于保护Counter的值
value int
Salin selepas log masuk

}

func (c *Counter) Inc() {

c.mux.Lock() // 加锁,确保在修改Counter值的时候不会有其他goroutine同时访问
defer c.mux.Unlock() // 解锁
c.value++
Salin selepas log masuk

}

func (c *Counter) Value() int {

c.mux.Lock()
defer c.mux.Unlock()
return c.value
Salin selepas log masuk

}

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的值
Salin selepas log masuk

}

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"
Salin selepas log masuk

)

taip Cache struct {

data map[string]string
mux sync.RWMutex // 读写锁用于保护Cache
Salin selepas log masuk

}

func (c *Cache) Get(key string) string {

c.mux.RLock() // 加读锁
defer c.mux.RUnlock() // 解锁
return c.data[key]
Salin selepas log masuk

}

func (c *Cache) Set(key, value string) {

c.mux.Lock() // 加写锁
defer c.mux.Unlock() // 解锁
c.data[key] = value
Salin selepas log masuk

}

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()
Salin selepas log masuk

}

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan