Integrierte Sperren und Mutexe in der Go-Sprache
Integrierte Sperren und Mutexe in der Go-Sprache
Mit der Popularität von Multi-Core-Prozessoren ist Multithread-Programmierung zu einem unverzichtbaren Bestandteil der Anwendungsentwicklung geworden. Bei der Multithread-Programmierung sind Sperren ein wichtiger Mechanismus zur Steuerung des gleichzeitigen Zugriffs auf gemeinsam genutzte Ressourcen. Die Go-Sprache bietet eine Fülle von Sperrmechanismen, von denen die am häufigsten verwendeten integrierten Sperren und Mutexe sind.
Bring Your Own Lock
Bring Your Own Lock ist ein Sperrmechanismus in der Go-Sprache, der leicht, einfach zu bedienen und leistungsstark ist. Die integrierte Sperre ist eine Variable mit Konkurrenzbedingungen. Das heißt, wenn mehrere Threads gleichzeitig auf die Variable zugreifen, ist eine Synchronisierung erforderlich, um inkonsistente Ergebnisse zu vermeiden.
In der Go-Sprache können Synchronisierungsvorgänge einfach mithilfe der integrierten Sperre durchgeführt werden. Die integrierte Sperre verfügt über zwei wichtige Methoden: Lock() und Unlock(). Die Lock()-Methode wird zum Erlangen der Sperre verwendet. Wenn die Sperre bereits von anderen Threads belegt ist, wechselt der aufrufende Thread in einen blockierenden Zustand Damit die Sperre aufgehoben wird, wird die Unlock()-Methode verwendet, um die Sperre aufzuheben.
Beispiel für die Verwendung einer integrierten Sperre:
var mu sync.Mutex // 定义一个锁变量 var count int func main() { for i := 0; i < 1000; i++ { go add() // 启动1000个线程,对count进行加1操作 } time.Sleep(time.Second) // 等待所有线程执行完成 fmt.Println(count) // 打印最终结果 } func add() { mu.Lock() // 获取锁 count++ // 对共享变量进行操作 mu.Unlock() // 释放锁 }
Im obigen Code wird eine globale Variablenanzahl als gemeinsam genutzte Ressource verwendet und durch Starten von 1000 Threads um 1 erhöht. Um sicherzustellen, dass der gleichzeitige Zugriff auf die Zählvariable keine Race Conditions verursacht, wird eine integrierte Sperre zur Synchronisierung verwendet. Rufen Sie in der Funktion add() zunächst die Methode mu.Lock() auf, um die Sperre zu erhalten, die gemeinsam genutzte Ressource zu betreiben und dann die Sperre über die Methode mu.Unlock() aufzuheben. Dadurch wird sichergestellt, dass die Operation an der Zählvariablen atomar ist und Rennbedingungen vermieden werden.
Mutex
Mutex ist ein weiterer Sperrmechanismus in der Go-Sprache, der auch zum Schutz gemeinsam genutzter Ressourcen verwendet wird. Mutexe ähneln integrierten Sperren und können verwendet werden, um das Auftreten von Race-Conditions zu verhindern. Im Vergleich dazu können Mutexe jedoch Vorgänge auf feinkörnigeren Codeblöcken sperren und entsperren.
Die Verwendung von Mutex ähnelt einer eigenen Sperre. In der Go-Sprache ist der Mutex-Typ sync.Mutex und der Prototyp lautet wie folgt:
type Mutex struct { // 包含Mutex的内部结构 } func (m *Mutex) Lock() { // 加锁操作 } func (m *Mutex) Unlock() { // 解锁操作 }
Bei Verwendung eines Mutex müssen Sie auch Codeblöcke hinzufügen, die zwischen Lock() und Unlock() synchronisiert werden müssen Methoden zur Gewährleistung der gemeinsamen Nutzung der Korrektheit der Ressourcen.
Beispiel für die Verwendung eines Mutex:
var mu sync.Mutex // 定义一个互斥量 var count int func main() { for i := 0; i < 1000; i++ { go add() // 启动1000个线程,对count进行加1操作 } time.Sleep(time.Second) // 等待所有线程执行完成 fmt.Println(count) // 打印最终结果 } func add() { mu.Lock() // 获取锁 count++ // 对共享变量进行操作 mu.Unlock() // 释放锁 }
Ähnlich wie bei der Verwendung integrierter Sperren wird im obigen Code ein Mutex verwendet, um den Zugriff auf die Anzahl der gemeinsam genutzten Ressourcen zu synchronisieren.
Zusammenfassung
Integrierte Sperren und Mutexe sind gängige Synchronisierungsmechanismen in der Go-Sprache, die dazu dienen, gemeinsam genutzte Ressourcen vor gleichzeitigen Änderungen zu schützen. Die eingebaute Sperre eignet sich zum Sperren und Entsperren des gesamten Codeblocks, während der Mutex zum Sperren und Entsperren von detaillierteren Codeblöcken verwendet werden kann. In der tatsächlichen Entwicklung sollte der geeignete Sperrmechanismus entsprechend den spezifischen Anforderungen ausgewählt werden, um die Zuverlässigkeit und Parallelität des Programms sicherzustellen.
Das obige ist der detaillierte Inhalt vonIntegrierte Sperren und Mutexe in der Go-Sprache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen





Das Problem der Warteschlange Threading In Go Crawler Colly untersucht das Problem der Verwendung der Colly Crawler Library in Go -Sprache. Entwickler stoßen häufig auf Probleme mit Threads und Anfordern von Warteschlangen. � ...

In der Bibliothek, die für den Betrieb der Schwimmpunktnummer in der GO-Sprache verwendet wird, wird die Genauigkeit sichergestellt, wie die Genauigkeit ...

Der Unterschied zwischen Stringdruck in GO -Sprache: Der Unterschied in der Wirkung der Verwendung von Println und String () ist in Go ...

Das Problem der Verwendung von RETISTREAM zur Implementierung von Nachrichtenwarteschlangen in der GO -Sprache besteht darin, die Go -Sprache und Redis zu verwenden ...

Zwei Möglichkeiten, Strukturen in der GO -Sprache zu definieren: Der Unterschied zwischen VAR- und Typ -Schlüsselwörtern. Bei der Definition von Strukturen sieht die Sprache oft zwei verschiedene Schreibweisen: Erstens ...

Was soll ich tun, wenn die benutzerdefinierten Strukturbezeichnungen in Goland nicht angezeigt werden? Bei der Verwendung von Goland für GO -Sprachentwicklung begegnen viele Entwickler benutzerdefinierte Struktur -Tags ...

Welche Bibliotheken in GO werden von großen Unternehmen oder bekannten Open-Source-Projekten entwickelt? Bei der Programmierung in Go begegnen Entwickler häufig auf einige häufige Bedürfnisse, ...

Warum meldet der DSN bei Verwendung von SQL.Open keinen Fehler? In Go Language, Sql.open ...
