Entwickler-Ecke
Windows API - Wie mit Critical Sections (kritischen Abschnitten) arbeiten?
Andreas Pfau - Fr 28.03.03 21:22
Titel: Wie mit Critical Sections (kritischen Abschnitten) arbeiten?
Hallo,
kann mir jemand erklären, was criticalSections sind? Ich weiß nur, dass die Igendwie zur Thread-Synchronisation dienen. Ich kenne schon WaitFor...(). Aber wie funktionieren die Abschnitte? Und wo wendet man die an, wo ist WaitFor...() besser?
OregonGhost - Sa 29.03.03 17:49
Wie der Name sagt, ist eine Critical Section ein kritischer Bereich in einem Programm. Das Konzept sieht vor, alle Zugriffe von verschiedenen Threads auf dieselben Daten in diesem Bereich vorzunehmen. Anders als bei den anderen Synchronisationsmethoden wartet ein Thread jedoch nicht darauf, dass ein Objekt frei wird, sondern er versucht einfach, die Critical Section zu betreten. Die Funktion EnterCriticalSection kehrt nämlich erst dann zurück, wenn der Thread, der vorher in der Critical Section war, LeaveCriticalSection aufgerufen hat.
Im Gegensatz zum Beispiel zu Semaphoren verwaltet hier das Programm die Critical Section (mit InitializeCriticalSection und DeleteCriticalSection). Critical Sections sind zwar etwas unflexibel und funktionieren auch nur innerhalb eines Prozesses, aber sie sind schnell und effizient für Mutual Exclusion, also wenn sowieso immer nur ein Thread auf die Daten zugreifen soll.
Weiteres siehe PSDK-Artikel "Critical Section Objects", dort wird auch auf Mutexes und Semaphoren eingegangen.
Und hoffentlich habe ich keinen Blödsinn erzählt, das ist das was ich glaube zu wissen ;c)
Andreas Pfau - Sa 29.03.03 18:01
Wow, ich hätte nicht gedacht, dass das so einfach ist! Vielen Dank. Ich habe zwar schon in der PSDK nachgelesen, aber nix gefunden. Dein Stichwort half weiter. Jetzt funzt's. Mit Semaphoren und Mutexen kenn eich misch schon ein bisschen aus. Nur ein Thread kann ein Mutex besitzen, und Semaphoren sind eigentlich das gleiche, oder? Ich meien, ich benutze Mutexe oder Semaphoren immer nur, um Multiple Instances zu vermeiden. Kann man die noch woanders einsetzen (konkrete Beispiele)?
Andreas Pfau - Sa 29.03.03 20:12
Da war noch was... "Overlapped"... sagt dir das was? Muss auch was mit Dateizugriff und Multithreadingzu tun haben. Ich will deswegen kein neues Topic schreiben, kennst du dich damit aus?
OregonGhost - So 30.03.03 12:29
Ich bin auch schon darauf gestoßen, das kommt bei asynchronen Dateioperationen vor (also wenn du Windows sagst, es möge bitte 2 GB von der Pladde einlesen und in der Zeit was besseres zu tun hast (c; ).
Aber ich kenne mich nicht damit aus, da ich meistens nur synchron einlese...
Aber auch das hat Microsoft in einem relativ kompakten Artikel namens "Synchronization and Overlapped Input and Output" im PSDK zusammengefasst.
Andreas Pfau - So 30.03.03 13:25
Danke für das Stichwort, das hilft mir schonmal erheblich weiter! :D
Aber ich bräuchte eine Demo, weil so ganz check' ich das doch nicht. Ich werden dann mal ein bisschen googeln.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!