Keselamatan fungsi: keselamatan goroutine: Ia boleh dipanggil dengan selamat dalam goroutin serentak. Keselamatan bukan goroutine: mengakses keadaan kongsi atau bergantung pada goroutine tertentu. Mekanisme penyegerakan: Mutex: melindungi akses serentak kepada sumber yang dikongsi. RWMutex: Membenarkan bacaan serentak dan hanya satu tulisan. Cond: Tunggu syarat tertentu untuk dipenuhi. WaitGroup: Tunggu sekumpulan goroutine selesai. Kes praktikal: Kaunter Concurrency menggunakan Mutex untuk melindungi keadaan kongsi dan memastikan ketepatan di bawah concurrency.
Mekanisme keselamatan dan penyegerakan Go berfungsi dalam persekitaran serentak
Dalam persekitaran serentak Go, adalah penting untuk memahami keselamatan fungsi dan mekanisme penyegerakan yang betul. Artikel ini akan meneroka konsep ini dan menunjukkannya melalui kes praktikal.
Keselamatan fungsi
Mekanisme penyegerakan
Untuk memastikan ketekalan data dan mengelakkan persaingan dalam persekitaran serentak, mekanisme penyegerakan perlu digunakan. Go menyediakan beberapa jenis penyegerakan terbina dalam:
Kes Praktikal: Kaunter Concurrency
Pertimbangkan contoh kaunter concurrency. Ia adalah nilai yang disimpan dalam pembolehubah selamat goroutine yang boleh ditambah secara selari. Untuk memastikan ketepatan pembilang di bawah konkurensi, mekanisme penyegerakan perlu digunakan.
package main import ( "fmt" "sync" "sync/atomic" ) var ( cnt int64 // 原子计数器 mu sync.Mutex // 互斥锁 ) func main() { wg := &sync.WaitGroup{} // 并发增量计数器 for i := 0; i < 10; i++ { wg.Add(1) go func() { mu.Lock() cnt++ mu.Unlock() wg.Done() }() } wg.Wait() fmt.Println("最终计数:", cnt) }
Dalam contoh ini, kami mempunyai akses serentak ke kaunter cnt
声明为原子变量以确保并发的安全增量。使用 mutex mu
来保护对 cnt
untuk mengelakkan keadaan perlumbaan.
Menjalankan program ini akan mengeluarkan:
最终计数: 10
Ini mengesahkan bahawa kaunter dinaikkan dengan betul 10 kali secara selari.
Atas ialah kandungan terperinci Keselamatan fungsi Golang dan mekanisme penyegerakan dalam persekitaran serentak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!