Announcement

Collapse
No announcement yet.

objecte auffangen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • objecte auffangen

    hallo leute

    vorn wech, möchte ich sagen das das ein langer text wird!

    also in meinen projekt bin ich in der lage in einem delegatenarray dynamisch delegaten anzulegen. diese sausen dann wieder los und rufen alle die selbe methode auf. in dieser methode wird ein neuer delegate erzeugt den ich dann asynchron starte.(das bedeutet das der delegate losläuft und die methode die er beauftragt bekommen hat anschupst und die hauptanwendung muss nicht warten bis der delegate fertig ist). so wenn ich nun in meinem array 5 erzeuge und fünf rufen jetzt die methode "Write on file auf" kann nur der erste schreiben(denn er hat exclusives recht zu schreiben). bei den anderen 4 also wenn der 2 ankommt knallt es. das nennt man auch nicht "Multithreadsave"(delegaten erzeugen unter der haube systemthreads).

    jetzt die frage

    wie kann ich es ermöglichen das die methode "WriteOnFile" erst das eine objekt abarbeitet und dann eins nach dem anderen??????????

    dica

  • #2
    Hallo,

    wenn alle Threads die gleiche Methode WriteOnFile nutzen, ist es am einfachsten, diese Methode mit dem Attribut <b>System.Runtime.CompilerServices.MethodImpl</b> zu kennzeichnen (Beispiel <i>MethodImpl(MethodImplOptions.Synchronized)</i>). Diese Methode verhält sich dann so, als ob ein SyncLock-Objekt die komplette Methode einkapseln würde, so dass immer nur 1 Thread damit arbeiten kann.

    Die <b>Monitor</b>-Klasse stellt weitere Synchronisations-Möglichkeiten zur Verfügung, die den Critical Sections aus dem Win32-API entsprechen. Über die beiden statischen Methoden <b>Enter</b> und <b>Exit</b> kann ein geschützter Codeblock betreten und verlassen werden. In C# steht über <b>lock</b> eine "Abkürzung" für diese Monitor-Klasse zur Verfügung.

    Die <b>ReaderWriterLock</b>-Klasse implementiert das sehr häufig benötigte "Single Writer + Multiple Reader"-Prinzip. Die Klasse stellt dazu die Paare AcquireReaderLock + ReleaseReaderLock und
    AcquireWriterLock + ReleaseWriterLock zur Verfügung. Jeder Aufruf der AcquireXYZ-Methode blockiert den aktuellen Thread so lange, bis die angeforderte Operation zulässig ist. Für die Sperranforderung kann auch ein Timeout-Wert für die maximale Wartezeit übergeben werden.

    Da es auch noch die <b>Mutex</b>-Klasse gibt, stellt .NET ein sehr breites Spektrum an Möglichkeiten für die Synchronisation von mehreren Threads zur Verfügung

    Comment

    Working...
    X