Zum Inhalt springen

SemaphoreFullException


neo336

Empfohlene Beiträge

Hallo zusammen

ich habe ein Problem mit dem Multithreading meines Programms

Eine Methode die einiges an Arbeit macht wird 380mal aufgerufen. um dies zu Beschleunigen habe ich alle multithreaded wobei bis zu 100 threads gleichzeitig laufen können. das Problem ist jedoch das eine einzige kleine Stelle, wo ein Insert in eine Datenbank gemacht wird, nur 1 Thread gleichzig sein darf.

gelöst ist das Follgendermassen:



// Definition

private static Semaphore _pool;


// Initialisierung

   _pool = new Semaphore(0, 1);

   _pool.Release(1);


// Codestelle

lock (_pool) {

    _pool.WaitOne();


    // Insert


    try {

        _pool.Release(1);

    }

    catch(Exception ex ) {

         ExceptionHandling.Log(ex);

    }

}

Wenn ich den Code so laufen lasse Funktioniert das Insert, also immer nur 1 Thread an dieser Stelle

Aber bei 3-6 Threads (je nach durchlauf) passiert eine SemaphoreFullException bei der stelle _pool.Release(1);

hat jemand eine Ahnug woran das liegen könnte?

Vielen Dank im voraus

und Freundliche Grüsse

neo336

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habs am anfach ohne das lock gehabt.

Dabei ist auch der selbe fehler passiert.

Ich habe dann beim googeln gelesen das die Semaphore klasse nicht atomar ist und hab gedacht dann mach ich mal ein lock darum schaden kanns ja nicht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn sich eh nur ein Thread zur gleichen Zeit im "Insert-Bereich" aufhalten darf, reicht ein Monitor vollkommen aus, da brauchst Du normalerweise überhaupt keinen Semaphor. Ich habe so ein bisschen den Eindruck, dass Du gar nicht so genau weißt wie Monitore, Semaphoren usw. funktionieren.

Aus dem geposteten Codefragmenten kann man den Kontrollfluß nicht ablesen, da müsstest Du schon ein bisschen mehr preisgeben.

Aber versuch es doch einfach erst mal mit einem Monitor alleine.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...