Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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.

Geschrieben

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.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...