Heim Backend-Entwicklung Golang Praktische gemeinsame Nutzung der Synchronisierung und des Sperrschutzes von Golang-Funktionen

Praktische gemeinsame Nutzung der Synchronisierung und des Sperrschutzes von Golang-Funktionen

May 16, 2023 am 09:04 AM
同步 golang函数 锁保护

Mit der Entwicklung des Internets und der Popularisierung von Cloud Computing und Big-Data-Technologie müssen moderne Softwaresysteme immer mehr Daten verarbeiten und gleichzeitig die Effizienz und Zuverlässigkeit des Systems gewährleisten. In diesem Zusammenhang kommt der Leistungsfähigkeit und den technischen Merkmalen der Sprache eine besondere Bedeutung zu. Unter anderem hat Golang als effiziente, leichte Programmiersprache mit hoher Parallelität in den letzten Jahren immer mehr Aufmerksamkeit und Anwendung gefunden. In diesem Artikel werden die Synchronisierungs- und Sperrschutzpraktiken von Golang-Funktionen erläutert und einige nützliche Erfahrungen zum Erfahrungsaustausch für Golang-Entwickler bereitgestellt.

  1. Prinzipien und Methoden der Synchronisierung

Synchronisierung ist der Schlüssel zur Zusammenarbeit zwischen mehreren Threads oder Prozessen. Ihr Hauptzweck besteht darin, den korrekten Zugriff und Schutz verschiedener Ressourcen sicherzustellen. In Golang sind die wichtigsten Mittel zur Realisierung der Synchronisation folgende:

1.1 Mutex-Sperre (sync.Mutex)

Mutex-Sperre ist der grundlegendste Synchronisationsmechanismus in Golang. Seine Hauptaufgabe besteht darin, sicherzustellen, dass nur eine Goroutine gleichzeitig auf gemeinsam genutzte Ressourcen zugreifen kann. Wenn eine Goroutine die Ressource anfordert, versucht sie, die Sperre zu erhalten. Wenn sie diese nicht erhalten kann, wird sie blockiert, bis die Sperre aufgehoben wird. Das Folgende ist ein Beispiel für eine einfache Mutex-Implementierung:

package main

import (
    "fmt"
    "sync"
)

var count int
var mu sync.Mutex // 互斥锁

func main() {
    for i := 0; i < 10; i++ {
        go increase()
    }

    // 等待所有goroutine执行完成
    for {
        mu.Lock()
        if count == 10 {
            mu.Unlock()
            break
        }
        mu.Unlock()
    }

    fmt.Println("count:", count)
}

func increase() {
    mu.Lock()
    defer mu.Unlock()
    count += 1
}
Nach dem Login kopieren
Nach dem Login kopieren

Im obigen Beispiel verwenden wir einen Mutex, um den atomaren Betrieb der gemeinsam genutzten Variablen count sicherzustellen. Innerhalb der Erhöhungsfunktion erwerben wir zunächst die Mutex-Sperre, führen dann eine Inkrementierungsoperation für die Zählung durch und geben schließlich die Sperre frei. Auf diese Weise können wir verhindern, dass der gleichzeitige Zugriff auf count zu unerwarteten Ergebnissen führt.

1.2 Lese-/Schreibsperre (sync.RWMutex)

RWMutex ist eine erweiterte Mutex-Sperre, die mehrere Lesevorgänge gleichzeitig unterstützt, aber nur einen Schreibvorgang zulässt. In der Implementierung organisiert es die Lesevorgänge mehrerer Goroutinen durch Umschalten zwischen Lese- und Schreibmodus und verbessert so die Parallelitätsleistung. Das Folgende ist ein Beispiel für eine einfache Implementierung einer Lese-/Schreibsperre:

package main

import (
    "fmt"
    "sync"
)

var count int
var mu sync.RWMutex // 读写锁

func main() {
    for i := 0; i < 10; i++ {
        go increase()
    }

    // 等待所有goroutine执行完成
    for {
        mu.RLock()
        if count == 10 {
            mu.RUnlock()
            break
        }
        mu.RUnlock()
    }

    fmt.Println("count:", count)
}

func increase() {
    mu.Lock()
    defer mu.Unlock()
    count += 1
}
Nach dem Login kopieren

Im obigen Beispiel verwenden wir eine Lese-/Schreibsperre, um den atomaren Betrieb der gemeinsam genutzten Variablenanzahl sicherzustellen. Innerhalb der Erhöhungsfunktion erwerben wir zunächst die Schreibsperre der Lese-/Schreibsperre, führen dann eine Inkrementierungsoperation für die Zählung durch und geben schließlich die Sperre frei. Auf diese Weise können wir verhindern, dass der gleichzeitige Zugriff auf count zu unerwarteten Ergebnissen führt.

  1. Praxis des Sperrschutzes

Zusätzlich zum Synchronisationsmechanismus bietet Golang auch einige praktische Methoden des Sperrschutzes, um die Integrität und Sicherheit der Daten zu gewährleisten. Im Folgenden finden Sie eine detaillierte Einführung in einige praktische Methoden:

2.1 Atomarer Betrieb (synchronisiert/atomar)

Der atomare Betrieb ist eine Technologie, die eine Datensynchronisation ohne Sperren gewährleisten kann. Golang bietet eine Reihe atomarer Operationsfunktionen zur Implementierung grundlegender Speichersynchronisationsfunktionen. Das Folgende ist ein Beispiel:

package main

import (
    "fmt"
    "sync/atomic"
)

var count int32

func main() {
    for i := 0; i < 10; i++ {
        go increase()
    }

    // 等待所有goroutine执行完成
    for {
        if atomic.LoadInt32(&count) == 10 {
            break
        }
    }

    fmt.Println("count:", count)
}

func increase() {
    atomic.AddInt32(&count, 1)
}
Nach dem Login kopieren

Im obigen Beispiel verwenden wir die atomare Operationsfunktion atomic.AddInt32(), um sicherzustellen, dass die Inkrementierungsoperation von count atomar ist, wodurch durch Rennbedingungen verursachte Datenausnahmen vermieden werden.

2.2 Kanalkommunikation

Channel ist ein wichtiges Synchronisierungstool in Golang. Es stellt die Korrektheit der Daten durch die Kommunikation zwischen Goroutinen sicher. Der Kanal ähnelt in gewisser Weise einer Unix-Pipe, die es einer Goroutine ermöglicht, einen Datenblock an eine andere Goroutine zu senden oder einen Datenblock zu empfangen. Hier ist ein Beispiel:

package main

import (
    "fmt"
)

func main() {
    ch := make(chan int)
    go increase(ch)

    // 接收所有增加的值
    count := 0
    for i := 0; i < 10; i++ {
       count += <-ch
    }

    fmt.Println("count:", count)
}

func increase(ch chan int) {
    for i := 0; i < 10; i++ {
       ch <- 1
    }
    close(ch)
}
Nach dem Login kopieren

Im obigen Beispiel verwenden wir Kanäle, um Race Conditions zu verhindern, die durch den gleichzeitigen Zugriff mehrerer Goroutinen auf die gemeinsam genutzte Datenanzahl verursacht werden. Innerhalb der Erhöhungsfunktion senden wir 10 1s über den Kanal an die Hauptfunktion, um den Zählvorgang durchzuführen. Innerhalb der Hauptfunktion empfangen wir die Daten im Kanal über eine Schleife und akkumulieren sie in der Zählvariablen, wodurch durch Race Conditions verursachte Datenausnahmen vermieden werden.

2.3 Die Defer-Anweisung von sync.Mutex

In Golang verwenden Mutex-Sperren häufig die Defer-Anweisung, um die korrekte Freigabe der Sperre sicherzustellen. Die Defer-Anweisung ist ein Mechanismus, der bewirkt, dass die Anweisung ausgeführt wird, wenn die Funktion zurückkehrt. Dadurch können Programmausnahmen vermieden werden, die durch das Vergessen der Freigabe der Sperre verursacht werden. Hier ist ein Beispiel:

package main

import (
    "fmt"
    "sync"
)

var count int
var mu sync.Mutex // 互斥锁

func main() {
    for i := 0; i < 10; i++ {
        go increase()
    }

    // 等待所有goroutine执行完成
    for {
        mu.Lock()
        if count == 10 {
            mu.Unlock()
            break
        }
        mu.Unlock()
    }

    fmt.Println("count:", count)
}

func increase() {
    mu.Lock()
    defer mu.Unlock()
    count += 1
}
Nach dem Login kopieren
Nach dem Login kopieren

Im obigen Beispiel haben wir die Defer-Anweisung verwendet, um die korrekte Freigabe der Mutex-Sperre sicherzustellen. Wenn die Goroutine die Erhöhungsfunktion verlässt, gibt die Defer-Anweisung die Sperre automatisch frei, um sicherzustellen, dass die nächste Sperrenerfassung erfolgreich ausgeführt werden kann.

Fazit

Das Obige ist die praktische gemeinsame Nutzung der Synchronisierung und des Sperrschutzes von Golang-Funktionen. Durch die Anwendung von Mutex-Sperren, Lese-/Schreibsperren, atomaren Operationen, Kanalkommunikation und Verzögerungsanweisungen können wir die Korrektheit und Sicherheit der Daten in der Golang-Multithread-Programmierung besser gewährleisten. Ob in großen Cloud-Computing-Systemen, verteilten Systemen oder Echtzeit-Datenverarbeitungssystemen, diese Synchronisations- und Sperrschutztechnologien sind von großer Bedeutung.

Das obige ist der detaillierte Inhalt vonPraktische gemeinsame Nutzung der Synchronisierung und des Sperrschutzes von Golang-Funktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Lösen Sie das Problem der gleichzeitigen Wiedergabe von Kopfhörern und Lautsprechern in Win11 Lösen Sie das Problem der gleichzeitigen Wiedergabe von Kopfhörern und Lautsprechern in Win11 Jan 06, 2024 am 08:50 AM

Im Allgemeinen müssen wir nur einen der Kopfhörer oder Lautsprecher gleichzeitig verwenden. Einige Freunde haben jedoch berichtet, dass sie im Win11-System auf das Problem gestoßen sind, dass Kopfhörer und Lautsprecher gleichzeitig klingen Schalten Sie es im Realtek-Panel aus und es ist in Ordnung. Schauen wir uns das unten an. Was soll ich tun, wenn meine Kopfhörer und Lautsprecher in Win11 zusammen klingen? 1. Suchen und öffnen Sie zuerst die „Systemsteuerung“ auf dem Desktop. 2. Rufen Sie die Systemsteuerung auf, suchen und öffnen Sie „Hardware und Sound“. „Realtek High Definition“ mit einem Lautsprechersymbol. „Audio Manager“ 4. Wählen Sie „Lautsprecher“ und klicken Sie auf „Rückseite“, um die Lautsprechereinstellungen einzugeben. 5. Nach dem Öffnen können wir den Gerätetyp sehen. Wenn Sie die Kopfhörer ausschalten möchten, deaktivieren Sie „Kopfhörer“.

Mar 18, 2024 am 09:46 AM

Wenn Sie feststellen, dass ein oder mehrere Elemente in Ihrem Synchronisierungsordner nicht mit der Fehlermeldung in Outlook übereinstimmen, kann dies daran liegen, dass Sie Besprechungselemente aktualisiert oder abgesagt haben. In diesem Fall wird eine Fehlermeldung angezeigt, die besagt, dass Ihre lokale Version der Daten mit der Remote-Kopie in Konflikt steht. Diese Situation tritt normalerweise in der Outlook-Desktopanwendung auf. Ein oder mehrere Elemente in dem von Ihnen synchronisierten Ordner stimmen nicht überein. Um den Konflikt zu lösen, öffnen Sie die Projekte und versuchen Sie den Vorgang erneut. Fix Ein oder mehrere Elemente in synchronisierten Ordnern stimmen nicht mit dem Outlook-Fehler überein. In der Outlook-Desktopversion können Probleme auftreten, wenn lokale Kalenderelemente mit der Serverkopie in Konflikt stehen. Glücklicherweise gibt es jedoch einige einfache Möglichkeiten, um zu helfen

Tipps zum Anwenden von Standardparameterwerten von Golang-Funktionen Tipps zum Anwenden von Standardparameterwerten von Golang-Funktionen May 15, 2023 pm 11:54 PM

Golang ist eine moderne Programmiersprache mit vielen einzigartigen und leistungsstarken Funktionen. Eine davon ist die Technik, Standardwerte für Funktionsparameter zu verwenden. In diesem Artikel erfahren Sie, wie Sie diese Technik verwenden und Ihren Code optimieren. 1. Was sind die Standardwerte von Funktionsparametern? Der Standardwert eines Funktionsparameters bezieht sich auf das Festlegen eines Standardwerts für seinen Parameter beim Definieren einer Funktion, sodass beim Aufruf der Funktion, wenn kein Wert an den Parameter übergeben wird, der Standardwert als Parameterwert verwendet wird. Hier ist ein einfaches Beispiel: funcmyFunction(namestr

MySQL-Datenmigration und -synchronisierung: So erreichen Sie die MySQL-Datenmigration und -synchronisierung zwischen mehreren Servern MySQL-Datenmigration und -synchronisierung: So erreichen Sie die MySQL-Datenmigration und -synchronisierung zwischen mehreren Servern Jun 15, 2023 pm 07:48 PM

MySQL ist ein sehr beliebtes relationales Open-Source-Datenbankverwaltungssystem, das in verschiedenen Webanwendungen, Unternehmenssystemen usw. weit verbreitet ist. In modernen Geschäftsanwendungsszenarien müssen die meisten MySQL-Datenbanken auf mehreren Servern bereitgestellt werden, um eine höhere Verfügbarkeit und Leistung zu gewährleisten, was eine MySQL-Datenmigration und -synchronisierung erfordert. In diesem Artikel wird erläutert, wie Sie die MySQL-Datenmigration und -synchronisierung zwischen mehreren Servern implementieren. 1. MySQL-Datenmigration MySQL-Datenmigration bezieht sich auf die Datenmigration auf dem MySQL-Server.

Erfahren Sie, wie Sie die Win10-Zwischenablage mit Ihrem Mobiltelefon synchronisieren Erfahren Sie, wie Sie die Win10-Zwischenablage mit Ihrem Mobiltelefon synchronisieren Jan 06, 2024 am 09:18 AM

Eine sehr nützliche Funktion der Win10-Zwischenablage ist die geräteübergreifende Cloud-Speicherfunktion, die sehr nützlich ist und Benutzern dabei helfen kann, gleichzeitig auf PC-Geräten und Mobilgeräten zu kopieren und einzufügen. Die Einstellungsmethode ist sehr einfach. Legen Sie sie einfach in der Zwischenablage im System fest. Win10-Zwischenablage mit Mobiltelefon synchronisieren 1. Klicken Sie zunächst unten links auf „Start“, um die Einstellungen einzugeben. 2. Klicken Sie anschließend auf „System“. 3. Wählen Sie links „Zwischenablage“. 4. Klicken Sie abschließend rechts unter „Geräteübergreifende Synchronisierung“ auf „Anmelden“ und wählen Sie dann Ihr Mobiltelefon aus.

Anwendung und zugrunde liegende Implementierung von Reflexion und Typzusicherung in Golang-Funktionen Anwendung und zugrunde liegende Implementierung von Reflexion und Typzusicherung in Golang-Funktionen May 16, 2023 pm 12:01 PM

Anwendung und zugrunde liegende Implementierung der Golang-Funktionsreflexion und Typzusicherung In der Golang-Programmierung sind Funktionsreflexion und Typzusicherung zwei sehr wichtige Konzepte. Durch die Funktionsreflexion können wir Funktionen zur Laufzeit dynamisch aufrufen, und Typzusicherungen können uns dabei helfen, Typkonvertierungsvorgänge beim Umgang mit Schnittstellentypen durchzuführen. In diesem Artikel werden die Anwendung dieser beiden Konzepte und die ihnen zugrunde liegenden Implementierungsprinzipien ausführlich erörtert. 1. Funktionsreflexion Funktionsreflexion bezieht sich auf das Abrufen spezifischer Informationen der Funktion, wenn das Programm ausgeführt wird, z. B. Funktionsname, Anzahl der Parameter, Parametertyp usw.

Tipps für elegante Exit- und Loop-Traversal-Sprünge aus Golang-Funktionen Tipps für elegante Exit- und Loop-Traversal-Sprünge aus Golang-Funktionen May 16, 2023 pm 09:40 PM

Als Programmiersprache mit hoher Entwicklungseffizienz und hervorragender Leistung sind die leistungsstarken Funktionsfähigkeiten von Golang eines seiner Hauptmerkmale. Während des Entwicklungsprozesses stoßen wir häufig auf Situationen, in denen wir eine Funktion beenden oder eine Schleife durchlaufen müssen. In diesem Artikel werden die eleganten Exit- und Loop-Traversal-Exit-Tipps von Golang-Funktionen vorgestellt. 1. ordnungsgemäßes Beenden von Funktionen Bei der Golang-Programmierung müssen wir manchmal Funktionen ordnungsgemäß beenden. Diese Situation tritt normalerweise auf, weil wir auf Fehler in der Funktion stoßen oder die Ausführungsergebnisse der Funktion nicht den Erwartungen entsprechen. Es gibt die folgenden zwei

So wählen Sie bestimmte Ordner zur Synchronisierung in OneDrive in Windows 11 aus So wählen Sie bestimmte Ordner zur Synchronisierung in OneDrive in Windows 11 aus Apr 13, 2023 pm 04:22 PM

Die OneDrive-App auf Ihrem System speichert alle Ihre Dateien und Ordner in der Cloud. Aber manchmal möchten Benutzer nicht, dass bestimmte Dateien oder Ordner gespeichert werden, und belegen ohne Abonnement OneDrive-Speicherplatz, der auf 5 GB begrenzt ist. Zu diesem Zweck gibt es in der OneDrive-App eine Einstellung, die es Benutzern ermöglicht, Dateien oder Ordner auszuwählen, die in der Cloud synchronisiert werden sollen. Wenn Sie auch danach suchen, hilft Ihnen dieser Artikel bei der Auswahl von Ordnern oder Dateien, die in OneDrive unter Windows 11 synchronisiert werden sollen. So wählen Sie bestimmte Ordner zur Synchronisierung in OneDrive in Windows 11 aus. Hinweis: Stellen Sie sicher, dass die OneDrive-App verbunden und synchronisiert ist

See all articles