2009-07-24 7 views
0

Ich bin eine Anwendung mit einer Menge Thread ausgeführt. Alle diese Threads aktualisieren Datenbank mit GPS-Koordinaten. In der Zwischenzeit kann die Anwendung eine Synchronisierungsanforderung empfangen. Bevor der Server diese Anforderung verarbeiten kann, müssen alle schreibenden Threads ihre Aufgabe beenden. Daher verwende ich ein Array von Wait-Handles, um dies zu verwalten.Thread-Priorität auf Wait-Handles erhöhen

So, hier ist das Szenario:

Die Schauspieler:

1 Synchro Thread 
N Writing Thread 

N Schreib Fäden arbeiten. Ein Synchro-Thread erreicht die Warte Handles Stop. Es beansprucht für das Schloss. Tun Sie dies, ist es auf das Ende der Liste von "Claim Lock Threads" gesetzt.

Problem ist: diese Liste könnte sehr lang sein, oder mein Synchro-Thread ist oberste Priorität.

Wie konnte ich erreichen, dass es einen VIP Pass gibt?

Antwort

2

Klingt, dass Sie stattdessen eine System.Threading.ReaderWriterLockSlim verwenden sollten. Die Schreiber können im "Lesen" -Modus des Schlosses handeln, der Synchro-Thread, der exklusiven Zugriff benötigt, kann in den "Schreiben" -Modus eintreten.

+0

Das wird nicht funktionieren in meiner Architektur. Die Autoren müssen ihre Arbeit wirklich beenden, bevor die Synchro stattfindet. Ich möchte nur wissen, ob ein jüngerer Thread Priorität gegenüber einem älteren bekommen könnte, um eine Sperre zu erhalten. – Roubachof

+0

Writer (Synchro) erhält Priorität auf dem ReaderWriterLockSlim, und die "Leser" (Ihre DataWriter) werden abgeschlossen, bevor Sie den Zugriff im Write-Modus erlauben. Sie können mehrere gleichzeitige "Lesen" -Modus (Ihre DataWriter) haben, aber nur einen Thread ausschließlich "Write" (Synchro) -Modus. – MaLio

0

Klingt so, als müssten Sie ein Priority-Locking-System implementieren. Es gibt ein Beispiel here

Verwandte Themen