Frage

Sind diese tatsächlich drei verschiedene Konzepte oder bin ich purzeln zu werden? (Ich habe Artikel über Threading und Garbage Collection zusammen zu lesen und haben verwirrt mich.)

„Critical Abschnitt“ - ich denke, das ist nur der Begriff für Codeabschnitte sein können, dass Sie mehrere Threads gleichzeitig, dh innerhalb Zugriff wollen Schloss und Monitor.Enter / Exit-Anweisungen nicht ?

„kritische Bereich“ - Keine wirkliche Ahnung hier - MSDN sagt etwas entlang der Linien von „Dies ist einen Host erzählt, die im Abschnitt geworfenen Ausnahmen breitere Wirkung haben könnten“. Und das „hosts des CLR zum Beispiel SQL Server“ können wählen Ausnahmen in kritischen Bereichen „anders“ geworfen zu behandeln. Unterschiedlich wie? Und warum? Und, was am wichtigsten ist, in welchen realen Szenarien könnte ich brauche Code als kritischen Bereich markieren?

"Constrained Execution Region" - ich auf diese kam, als über die CriticalFinalizerObject in einem Garbage-Collection-Artikel zu lesen.

Alles, was ich von MSDN auf diesem verstehen kann ist, dass Code in einer dieser Regionen ist irgendwie laufen garantiert (aber wie?) Und müssen daher nicht „out-of-band“ Ausnahmen werfen.

Was ist ein out-of-band exception? (Ich tat dies, google, aber es hat mich nur gefragt, ob ich meinte, „außerhalb der Grenzen Ausnahme“).

Ist es nicht behandelte Ausnahme? Oder nur bestimmte Arten von Ausnahmen? Und wieder, was am wichtigsten ist, in welchen realen Szenarien könnte ich brauche einen „eingeschränkten Ausführungsbereich“?

Wie ich verstehe nicht die Konzepte überhaupt gut, ich bin nicht sicher, was Tags, um diese Frage andere braucht als „.NET“.

War es hilfreich?

Lösung

Nur mein Verständnis dieser Konzepte:

Kritische Abschnitt -. Wie Sie gesagt haben

Critical Region - Dies scheint die big-picture-Version von "lassen Sie sich nicht Ausnahmen von einem Thread zu entkommen".

Constrained Execution Region - Dies ist eine Möglichkeit, ein Stück Code mehr oder weniger Atom von Ausnahmen durch Schutz vor Unterbrechung zu machen. Die Beispiel auf dieser Seite Anwendungen rel="nofollow es, um sicherzustellen, dass die Zuweisung und Speicherung eines Griffs beide ausgeführt. Beachten Sie, dass es keine Rollback, es ist eher ein vorbeugendes System.

Es gibt Richtlinien für „normale Programmierung“, die ein wenig so aussehen, das heißt, wenn Equals oder eine implizite Operator überschreiben, sollten Sie werfen (etwas) nicht.

Andere Tipps

Microsoft könnte es anders sein zu definieren, aber im Allgemeinen, kritische Bereich und kritische Abschnitt ist die gleiche .

Sie werden verwendet, um Regionen zu beschreiben, wo zwei oder mehrere Prozesse (oder Threads) sind zugreifenden same Shared Memory und Scheitern auf < strong> Koordinate , um sie zu Rennbedingungen führen werden, dass das gewünschte Verhalten in der Ausführung, wie das klassische Beispiel verhindern, dass Pétur oben zum Erhöhen und Erniedrigen eine Variable gibt.

Eine nette Diskussion kann in Tanenbaum, A. S., und Bos, H. (2015) gefunden werden. Moderne Betriebssysteme (Pearson, Boston, MA), 4. Aufl, S.. 1101. Frühere Ausgaben sowie die Kurs Websites von zahlreichen Universitäten, die Materialien für ihre Betriebssysteme Kurse anbieten.

Nach Concurrent Programming Windows von Joe Duffy die Definitionen für kritische Abschnitt / Region sind wie folgt:

Kritische Abschnitt : In Win32 kritischen Abschnitt ist eine einfache Datenstruktur (CRITICAL_SECTION) verwendet kritische Bereiche zu bauen.

Critical Region :. Ist ein Code Region, die gegenseitige Ausgrenzung genießt (dies scheint zu sein, was man als einen kritischen Abschnitt in der obigen sich beziehen)

Dieser Blog-Eintrag wird in Ihrer Verwirrung füllen. http://blogs.msdn.com/b/bclteam /archive/2005/06/14/429181.aspx

Critical Section Eine Reihe von Anweisungen, den Zugang von denen einige Objekte gemeinsam genutzt.

Ignorieren für den Moment, dass beide ProzessA und ProcessB können gleichzeitig ausgeführt werden. Sie würden nicht auf dem Wert von x abhängen wollen, wenn entweder ProzessA oder ProcessB wird von vielen verschiedenen Threads gleichzeitig ausgeführt werden, da es höchstwahrscheinlich zu einer Race-Bedingung.

In diesem Beispiel sind die beiden While-Schleifen sind Kritische Abschnitte.

int x = 0;
Process A() {
    while(true) {
        x++;
        x--;
    }
}
Process B() {
    while(true) {
        x++;
        x--;
    }
}

Critical Region Eine Reihe von kritischen Abschnitten.

Nehmen Sie nun an, dass Sie ProzessA und ProcessB gleichzeitig ausführen kann. Jeder Prozess hat einen kritischen Abschnitt. Sowohl der Abschnitte teilen sich die gleiche Variable (x). Zusammen bilden die beiden kritischen Abschnitte einen kritischen Bereich. Warum ist das wichtig? Wenn Sie davon ausgehen, dass der kritische Abschnitt von ProzessA durch gegenseitigen Ausschluss bewacht wird, werden Sie noch falsche Ergebnisse in x erhalten, wie ProcessB ehren nicht den gegenseitigen Ausschluss. Sie müssen mutual exclusion auf dem kritischen Bereich implementieren, indem sie sich auf jedem kritischen Abschnitt der Umsetzung, die die Region bildet.

In Windows, ich gearbeitet habe nur mit einem Critical Section so weit. Zu meiner Erfahrung ist es ein Win32-User-Space-Thread-Verriegelungsmechanismus. Das bedeutet, es kann in einem Verfahren verwendet werden, um Ressourcen von mehreren Threads gemeinsam genutzt zu verriegeln. Dies ist nicht systemweit nur prozess breit. Ein Beispiel dafür, was es nicht ist, ist eine Kernel-Space Sperre (wie Mutexe).

Zum Beispiel boost :: Thread verwendet kritische Abschnitte in seiner Win32 Implementierung - oder zumindest es tat, als ich es verwendet -. Und verwendet Mutexe in Linux, über pThreads

Jeder Abschnitt des Codes, ist es ein kritischer Bereich genannt eingeben kann von jedem Prozess, der es vor einem anderen Prozess beginnt beendet werden soll.

Kritische Abschnitt: ein aegment Code. Jeder Prozess hat einen kritischen Abschnitt, in der comon Variablen austauschen, Tabelle aktualisiert, schreibe Datei und ... Das wichtige Merkmal ist, dass, wenn ein Prozess in seinem kritischen Abschnitt ausgeführt wird, wird kein anderer Prozess seinen kritischen Abschnitt betreten und bietet manuelle Ausschluss. Natürlich, das zu erreichen, wird ein Synchronisations-Tool „Semaphore“ genannt, wenn es ‚n‘ Prozesse arw. Eine Semaphore ist eine ganze Zahl varaible.

Critical Region: ist ein Synchronisations Konstrukt, das schützt gegen bestimmte einfache Fehler mit Semaphore Lösung des kritischen Abschnitts Problem verbunden, die vom Programmierer gemacht werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top