Golang: die Vermeidung von race-conditions

Was sind einige gute Praktiken zu verhindern, dass race-conditions in Gehen?

Die einzige, die ich denken kann, ist nicht Austausch von Daten zwischen goroutines die Eltern goroutine sendet eine Tiefe Kopie eines Objekts, nicht das Objekt selbst, so dass das Kind goroutine kann nicht mutieren, etwas, was die Eltern können. Dies würde mehr heap-Speicher, aber die andere alternative ist, zu lernen, Haskell 😛

Edit: außerdem, gibt es irgendein Szenario, in dem die Methode, die ich oben beschrieben immer noch in race conditions?

  • Race conditions sind schwer zu Debuggen, ist es auch schwierig zu meistern, Sie zu vermeiden. Ich würde vorschlagen, denken über die Muster, die hier beschrieben von Rob Pike vimeo.com/49718712, wie er geht durch bestimmte Konstrukte wie Kanäle und die CSP-Semantik einer Anwendung sicher durch design anstatt sich Gedanken über alle Probleme, die im Zusammenhang mit mutexs. Tut mir Leid wenn das nicht Ihre Frage beantworten, aber ich hoffe, es öffnet mehr Türen zu neuen Ideen.
  • Danke für den link. Yep, race conditions sind schwer zu verhindern, aber auch schwieriger zu Debuggen! Ich denke, eine unveränderliche version der Sammlungen lindern würde das problem in gewisser Weise, aber dann sind wir wieder in die funktionale Programmierung Hinterhof.
  • Es gibt andere unveränderlich-basierte/funktionale Sprachen (wie z.B. F#), aber es ist wirklich style. Du hast Recht darüber brauchen mehr Speicher, aber die richtige Gestaltung können zu beseitigen einige der overhead. Zum Beispiel, schreiben-auf-die Modifikation von arrays kann man in n log n Raum (oder weniger für einige mögliche Fälle) im Durchschnitt eher als eine naive 2n. Obwohl Sprache/optimizer unterstützen können, tun einige verrückte Dinge, die für den Zweck gebauten Sprachen...
InformationsquelleAutor tldr | 2014-05-17
Schreibe einen Kommentar