Java bietet ein sehr praktisches Idiom zum Synchronisieren kritischer Codeabschnitte:
%Vor%Oder
%Vor%Was ist das Äquivalent?
(Eine schnelle Suche zeigt: golang.org/pkg/sync/ - was scheint (vielleicht irre ich mich) ein bisschen zu niedrig für den allgemeinen Gebrauch.)
(Beispiel dafür, warum mir das wichtig ist: Ich muss eine Nachricht an mehrere Listener über Kanäle senden. Kanäle bieten einen guten Kanal für die Daten, ohne etwas synchronisieren zu müssen, aber wenn Kanäle hinzugefügt oder entfernt werden, muss ich die ändern Liste von Kanälen, die zu jeder Zeit auftreten können, müssen in der Lage sein, mit Nebenläufigkeit umzugehen.)
sync.Mutex ist eine gegenseitige Ausschlusssperre, sie kann eine ähnliche Funktionalität wie der Schlüssel synchronized
java bereitstellen -word (außer dass Sperren in Java den gegenseitigen Ausschluss von reentrant
bereitstellen):
Entspricht:
%Vor%Eine andere Lösung für die Verwendung eines Mutex ist die Verwendung eines Kanals zur Kommunikation von Listener-Änderungen.
Ein vollständiges Beispiel in diesem Stil sieht so aus. Der interessante Code ist in FanOuter.
%Vor%um die Antwort von Tarrsalah zu verlängern.
Sie können sync.Mutex zu Ihrem Objekt hinzufügen, so dass sie direkt gesperrt und entsperrt werden können.
%Vor%Defer'd-Befehle werden am Ende der Funktion ausgeführt, so dass Sie wissen, dass sie in größeren Funktionen gesperrt und entsperrt wird.
Tags und Links synchronization go