Etwas von einem interessanten hier denke ich. Ich habe eine Klasse, die für das "Multiplexen" einer Anzahl von Verarbeitungsoperationen auf eine feste Anzahl von Threads zuständig ist. Der typische Fall ist eine Art Producer/Consumer-Problem, bei dem jede Operation aus einem WaitHandle (in diesem Fall dem Semaphor, der die Anzahl der in der Warteschlange enthaltenen Elemente verfolgt) und einem zu aktivierenden Delegaten besteht.Kombinieren Wartegriffe?
Zum Beispiel, wenn ich zwei Produzenten (A und B) habe, produzieren die Artikel in zwei separate Warteschlangen. Anstatt zwei Consumer-Threads für jeden Producer (A1, A2, B1, B2) zu erstellen, multiplexe ich die vier Konsumenten-Threads auf zwei Threads. Der Code für diese „Multiplexer“ läuft so etwas wie dieses (vereinfacht ein Bit):
WaitHandle[] waitHandles = new WaitHandle[2];
waitHandles[0] = NumberOfItemsFullInProducerAQueue;
waitHandles[1] = NumberOfItemsFullInProducerBQueue;
while(true)
{
int index = WaitHandle.WaitAny(waitHandles);
if(index == 0)
{
// handle the item from queue A
}
else
{
// handle the item from queue B
}
}
Ich versuche, dieses Konzept auf ein etwas komplizierteres Beispiel zu erweitern, wo eine Aktion mehrere Warte benötigen Griffe zufrieden zu sein bevor es ausgeführt wird. Ich frage mich, ob es einen WaitHandle.Combine (waitHandle1, waitHandle2) Aufruf gibt, den ich machen kann, um zwei Wait Handles zu einem einzigen Wait Handle zu kombinieren. Das Endergebnis wäre so etwas wie:
A,B,C,D are waitHandles
E = Combine(A, B)
F = Combine(C, D)
waitHandles = { E, F }
while(true)
{
int index = WaitHandle.WaitAny(waitHandles);
if(index == 0)
{
}
else
{
}
}
Extra Punkte?
Obwohl keine Voraussetzung, kann es auch wirklich nett sein, wenn sich die Kombinationen von Waithandles überschneiden könnten. Zum Beispiel so etwas wie dieses:
A,B,C are waitHandles
D = Combine(A, B)
E = Combine(A, C)
waitHandles = { D, E }
// same as above from here
Danke für Ihre Hilfe SO
Zusätzliche Punkte? Ich werde dann auf das Kopfgeld warten. –
Habe ich irgendeine Art von SO Community no-no damit gemacht? (Ein weiterer Beweis dafür, dass das Internet Sarkasmus-Skripte benötigt, um Situationen wie diese eindeutig zu machen) ... – LorenVS
@LorenVS Ich denke, worauf Hans hinweist, ist, dass man diese Extrapunkte tatsächlich über eine Prämie vergeben kann, eher weil sie metaphysisch sind. Was bedeutet und für "Extrapunkte" eigentlich eigentlich? Können wir mit dem Hamster spielen? –