2010-04-27 5 views
11

Ich habe gehört, dass die Wahl, das Wort "synchronisiert" zu verwenden, um mutexed Aussagen zu beschreiben, einfach ein Fehler ist (Edit: "Fehler" war eine schlechte Wahl der Wörter hier. Siehe Bearbeiten) in Java, aber ich frage mich, ob Es gibt tatsächlich einen Grund für die Wahl. Warum wird das synchronisierte Schlüsselwort in Java "synchronisiert" anstelle von genauer "mutexed" genannt?

[Bearbeiten]

Angestachelt von Safyan Kommentare möchte ich, dass die Synchronisation hinzufügen, ist ein allgemeiner Begriff für Zeitbeziehungen zwischen Threads zu etablieren. Es kann gegenseitige Ausgrenzung und Dinge wie Ratenkontrolle beinhalten (zB zwei Threads, die etwas mit der gleichen Geschwindigkeit machen). Es erscheint unnötig zwiespältig, "synchronisiert" zu verwenden, um gegenseitigen Ausschluss anstelle eines spezifischeren Schlüsselworts wie "mutexed" zu meinen.

+0

möglicherweise eine nützliche Referenz: http://StackOverflow.com/Questions/1085709/what-does-synchronized-mean –

Antwort

7

Es ist kein Fehler. Es bedeutet, was es sagt; Der Code muss mit anderen Threads synchronisiert werden, um einen gegenseitigen Ausschluss zu ermöglichen. Und tatsächlich kann der Begriff synchronisiert sinnvoller sein als "Mutex", da "Mutex" einen sehr speziellen Typ von Synchronisationsgrundelement impliziert, und das synchronisierte Schlüsselwort könnte unter Verwendung einer beliebigen Anzahl von Thread-Synchronisations-Grundelementen implementiert werden (Test & gesetzt mit aktiv Polling, Semaphore usw.).

+0

Für mich ist "Mutex" gemeinsame Abkürzung für "wechselseitige Ausschluss" kein bestimmtes primitiv, obwohl es möglicherweise Sei der Name eines Primitivs in einer bestimmten Sprache. –

+1

@Edward, sowohl unter UNIX als auch unter Windows, ist Mutex ein spezielles Primitiv, das Sperren, Entsperren und Trylock unterstützt. Der Java-Monitor unterstützt auch wait und notify, die Aspekte von Bedingungsvariablen sind. –

+0

@Safyan, fair genug, aber bezieht sich "Synchronisierung" nicht allgemein auf das Einrichten von Zeitbeziehungen zwischen Aufgaben? Mutex kann ein überladener Begriff sein, aber es scheint klarer als "synchronisiert". –

0

Das synchronisierte Schlüsselwort wird verwendet, um die Sperre auf einem Monitor zu erfassen und freizugeben. Wie Mutexe werden Monitore für die Steuerung des gemeinsamen Zugriffs verwendet, sie sind jedoch nicht identisch.

Die Verwendung von synchronisiert in sich selbst ist kein Fehler, aber es kann ein Low-Level-Konstrukt für die Verwendung mit Multi-Threading sein, und unangemessene Verwendung kann schnell zu Multithreading-Fehler führen.

+0

Ich denke, Sie wollten sagen: "Verwendung in sich synchronisiert." –

+0

Danke, ich habe es behoben. – mdma

0

Die Verwendung von synchronisierten Schlüsselwort anstelle von Mutex ist eigentlich eine gute Möglichkeit, den Begriff auszudrücken. Mit Mutex sind wir nicht ganz klar, aber das synchronisierte Schlüsselwort selbst erzählt von sich. Synchronisiert wird bei dem Code platziert, der tatsächlich zwischen keiner der Threads synchronisiert werden muss, die alle auf diesen Code zugreifen möchten. Deshalb wird es als synchronisiert bezeichnet.