2017-06-04 18 views
-2

Ich habe einige Threads arbeiten an einem Array, und jeder von ihnen sortiert ihren Teil, parallel zu den anderen. Ich habe ein globales Array von pthread_t, in dem ich die ID jedes Threads sortiere. Hier ist der Teil, den ich nicht herausfinden kann: Nachdem ein Thread mit der Sortierung fertig ist, möchte ich, dass er etwas druckt, aber die Reihenfolge muss von Threads [MAX] zu Threads [0] sein. Wie mache ich das? Ich habe versucht zu verstehen, wie pthread_cond_wait() und pthread_cond_signal() zu verwenden sind, aber ich bin mir nicht einmal sicher, ob dies meine Aufgabe ist.die Reihenfolge der Drucke in Pthreads wählen

Im Wesentlichen möchte ich, dass meine Threads parallel arbeiten, bis sie einen bestimmten Punkt erreichen, an dem sie in einer bestimmten Reihenfolge weiterlaufen sollen.

+0

Drucken Sie die Daten, nachdem alle Threads beendet sind? es kann nicht parallel gemacht werden. –

+0

@ WeatherVane vor allem möchte ich nicht parallel, sondern in einer bestimmten Reihenfolge, und zweitens möchte ich nicht drucken ** nach ** sie sind fertig, aber der Druck ist in der letzten Zeile jedes Threads. – Gspoon

+0

Warum muss der Druck die letzte Zeile jedes Threads sein? –

Antwort

1

Es ist möglich. Ich verstehe, was die Gründe für solche Uni-Aufgaben sind. Netter, ich schätze es auf eine böse Weise. Der Algorithmus ist einfach, aber wenn Sie so etwas in eine Lösung des realen Problems stecken, würden Sie dominieren. Um es einfach auszudrücken: Alle Threads müssen nach der Hauptarbeit (Sortierung) auf die Barriere warten. Wenn alle von ihnen die Barriere erreichen, warten sie auf eine separate Einheit und Sie müssen zuerst eine, dann eine zweite und dann eine andere auslösen.

Also müssen Sie herausfinden, wie die Barriere zu implementieren, jeder Thread würde warten, bis der letzte es erreichen.

Und Tipp für die Auslösung: Sie müssen alle von ihnen auf einmal auslösen. Aber nur entworfene würde man wirklich verarbeiten, und andere würden wieder auf die Entität warten. (edit: es könnte besser gemacht werden, aber raten Sie es selbst).

Tun Sie Ihre Arbeit, tun Sie Ihre Forschung, zeigen Sie uns etwas Code, dann erhalten Sie einige detailliertere Hilfe.

BTW, es gab einige Fragen bezüglich bedingter Variablen in den letzten 24 Stunden hier auf Stapelüberlauf. Geh, sieh nach ihnen. Sie können einige Erklärungen und Ideen für Ihre Aufgabe finden.