Heim  >  Artikel  >  Backend-Entwicklung  >  Informationen zur Golang-Lese-/Schreibsperre

Informationen zur Golang-Lese-/Schreibsperre

PHPz
PHPznach vorne
2020-09-25 14:18:473339Durchsuche

Die Spalte Golang-Tutorial unten stellt Ihnen die Golang-Lese-/Schreibsperre vor. Ich hoffe, dass sie Freunden, die sie benötigen, hilfreich sein wird!

Informationen zur Golang-Lese-/Schreibsperre

golangLese-/Schreibsperre, gekennzeichnet durch

  • Lesesperre: Mehrere Coroutine-Lesevorgänge können gleichzeitig ausgeführt werden, Schreibvorgänge sind nicht zulässig.

  • Schreibsperre: Nur Eine Coroutine ist gleichzeitig zulässig. Schreibvorgänge werden ausgeführt, andere Schreibvorgänge und Lesevorgänge sind nicht zulässig.

Es gibt vier Methoden für Lese-/Schreibsperren. RLock: Lesesperre erwerben. RUnLock : Lesesperre aufheben

  • Sperren: Schreibsperre erwerben

  • UnLock: Schreibsperre aufheben

  • Nutzungsbeispiele sind wie folgt

    package main
    
    import (    "fmt"
        "sync"
        "time")var gRWLock *sync.RWMutexvar gVar intfunc init() {
        gRWLock = new(sync.RWMutex)
        gVar = 1}
    
    func main() {    var wg sync.WaitGroup
        go Read(1, &wg)
        wg.Add(1)
        go Write(1, &wg)
        wg.Add(1)
        go Read(2, &wg)
        wg.Add(1)
        go Read(3, &wg)
        wg.Add(1)
    
        wg.Wait()
    }
    
    func Read(id int, wg *sync.WaitGroup) {
        fmt.Printf("Read Coroutine: %d start\n", id)
        defer fmt.Printf("Read Coroutine: %d end\n", id)
        gRWLock.RLock()
        fmt.Printf("gVar %d\n", gVar)
        time.Sleep(time.Second)
        gRWLock.RUnlock()
    
        wg.Done()
    
    }
    
    func Write(id int, wg *sync.WaitGroup) {
        fmt.Printf("Write Coroutine: %d start\n", id)
        defer fmt.Printf("Write Coroutine: %d end\n", id)
        gRWLock.Lock()
        gVar = gVar + 100
        fmt.Printf("gVar %d\n", gVar)
        time.Sleep(time.Second)
        gRWLock.Unlock()
        wg.Done()
    
    }

Das obige ist der detaillierte Inhalt vonInformationen zur Golang-Lese-/Schreibsperre. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen