wie sequenziell auf Listenelemente in jedem Thread zugegriffen werden kann

8

Vor kurzem wurde mir diese Frage in einem Telefoninterview gestellt

"Angenommen, es gibt 3 Array-Listen l1, l2 und ampl3 von gleicher Länge.  Drei Threads greifen auf drei Listen zu.  Sag T1 - & gt; l1, T2 - & gt; l2 & amp; T3 - & gt; l3.  Es sollte in der Reihenfolge zuerst Element des 1. dann erstes Element der 2. Liste und dann erstes Element der 3. Liste drucken. Dann zweites Element des ersten und zweiten Elements der zweiten Liste und dann zweites Element der dritten Liste. "

Ich antwortete, dass die Verwendung von Semaphoren dieses Problem lösen kann, aber wenn ich mich mit Semaphor versuchte, konnte ich die richtige Antwort nicht bekommen. Was ist falsch in meinem unteren Code

%Vor%     
sia 15.02.2015, 09:36
quelle

1 Antwort

6

Ein Semaphor allein wäre für Ihre Anforderungen nicht geeignet. Ein Semaphor kann den Zugriff auf eine bestimmte Ressource synchronisieren, behält jedoch nicht die Reihenfolge zwischen den Threads bei, die versuchen, auf sie zuzugreifen. Per MSDN :

  

Es gibt keine garantierte Reihenfolge, wie FIFO oder LIFO, in der blockierte Threads den Semaphor eingeben.

Stattdessen würde ich vorschlagen, dass Sie eine Reihe von Wait-Handles verwenden, einen pro Thread, so dass jeder Thread vor dem Drucken jedes Elements auf seinem eigenen Handle wartet und danach den Handle des nächsten Threads signalisiert. Das folgende Beispiel ist verallgemeinert, um mit einer beliebigen Anzahl von Listen (Threads) zu arbeiten.

%Vor%     
Douglas 15.02.2015 10:14
quelle

Tags und Links