Die Sperren in der Go-Sprache implementieren synchronisierten gleichzeitigen Code, um Datenkonkurrenz zu verhindern: Mutex: Mutex-Sperre, die sicherstellt, dass nur eine Goroutine gleichzeitig die Sperre erhält und zur Steuerung kritischer Abschnitte verwendet wird. RWMutex: Lese-/Schreibsperre, die es mehreren Goroutinen ermöglicht, Daten gleichzeitig zu lesen, aber nur eine Goroutine gleichzeitig Daten schreiben kann. Sie eignet sich für Szenarien, die häufiges Lesen und Schreiben gemeinsam genutzter Daten erfordern.
In Go werden Sperren hauptsächlich verwendet, um gleichzeitigen Code zu synchronisieren und Datenkonkurrenz durch gleichzeitigen Zugriff zu verhindern. Die Go-Sprache bietet mehrere Arten von Sperren mit jeweils unterschiedlichen Eigenschaften und Verwendungsszenarien.
sync.Mutex
: Mutex-Sperresync.Mutex
:互斥锁互斥锁是一种最基本的锁,它保证同一时间只有一个 goroutine 可以获取锁。使用 Mutex
可以实现对临界区的访问控制。
package main import ( "fmt" "sync" ) var counter int var mutex sync.Mutex func main() { var wg sync.WaitGroup for i := 0; i < 500; i++ { wg.Add(1) go func() { defer wg.Done() mutex.Lock() counter++ fmt.Printf("Counter: %d\n", counter) mutex.Unlock() }() } wg.Wait() }
sync.RWMutex
Mutex
, um den Zugriff auf kritische Abschnitte zu steuern. package main import ( "fmt" "sync" ) type BankAccount struct { balance int sync.RWMutex } func (b *BankAccount) Deposit(amount int) { b.Lock() defer b.Unlock() b.balance += amount } func (b *BankAccount) Withdraw(amount int) { b.Lock() defer b.Unlock() b.balance -= amount } func (b *BankAccount) Balance() int { b.RLock() defer b.RUnlock() return b.balance } func main() { var wg sync.WaitGroup bankAccount := BankAccount{balance: 100} for i := 0; i < 500; i++ { wg.Add(1) go func() { defer wg.Done() bankAccount.Deposit(10) }() } for i := 0; i < 500; i++ { wg.Add(1) go func() { defer wg.Done() bankAccount.Withdraw(10) }() } fmt.Println(bankAccount.Balance()) wg.Wait() }
sync.RWMutex
: Lese-/Schreibsperre🎜🎜Mit der Lese-/Schreibsperre können mehrere Goroutinen gleichzeitig Daten lesen, aber nur eine Goroutine gleichzeitig Daten schreiben. Dies ist sehr nützlich für Szenarien, die häufiges Lesen und Schreiben gemeinsam genutzter Daten erfordern. 🎜rrreeeDas obige ist der detaillierte Inhalt vonWie wird die Lock-in-Golang-Funktion implementiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!