Bila Memilih Mutex lwn. Saluran
Golang menyediakan kedua-dua penyegerakan.Mutex dan saluran untuk pengaturcaraan serentak, memberikan keputusan kepada pembangun alat mana yang hendak digunakan dalam senario yang berbeza.
Mutex lwn. Saluran
Menggunakan a Mutex
Mutexes sesuai untuk situasi di mana:
Contoh
1. Pembilang Mudah:
Mutex boleh digunakan untuk melaksanakan pembilang ringkas yang memastikan hanya satu goroutine menambah pembilang pada satu masa.
import "sync" var counter int var m sync.Mutex func incrementCounter() { m.Lock() counter++ m.Unlock() }
2. Permainan Ping Pong:
Walaupun saluran sering digunakan untuk permainan ping-pong, Mutexes boleh mencapai kefungsian yang sama dengan menjaga akses kepada objek bola yang dikongsi.
import "sync" type Ball struct { hits int } var ball Ball var m sync.Mutex func player1() { for { m.Lock() ball.hits++ fmt.Println("Player 1:", ball.hits) m.Unlock() } }
3. Cache Mudah:
Mutexes boleh digunakan untuk melaksanakan cache ringkas dengan akses selamat benang kepada kandungannya.
import "sync" type Cache struct { m map[string]interface{} mu sync.Mutex } func (c *Cache) Get(key string) interface{} { c.mu.Lock() defer c.mu.Unlock() return c.m[key] }
Memilih Antara Mutex dan Saluran
Pilihan antara mutex dan saluran bergantung pada keperluan khusus tugasan. Mutexes sesuai untuk senario yang menghalang keadaan perlumbaan dan memastikan akses selamat benang kepada data dikongsi adalah yang paling penting. Saluran, sebaliknya, cemerlang dalam komunikasi dan perkongsian data antara gorouti.
Atas ialah kandungan terperinci Mutex vs. Saluran: Bilakah Anda Harus Pilih Yang Mana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!