Wie ein Verfahren mit Zufallszahl der aktiven Threads synchronisieren?

stimmen
0

Ich habe folgendes Problem. Mein Prozess laicht 4 Threads, die die gleiche Aufgabe selbstständig durchführen und müssen für alle von ihnen warten, um die Verarbeitung, bevor sie an die nächste Verarbeitungs Iteration zu beenden. Jedoch ist die Anzahl der aktiven Threads, das heißt die Anzahl von Threads, die Verarbeitung von Daten und für die anderen warten müssen, ist von 1 bis 4. Beispielsweise variable zu beenden, werden einige Male 2 Fäden Daten verarbeiten und sie müssen einander warten vor dem Fortfahren.

Ich habe habe gelesen, dass Hindernisse, die für mich tun konnte, aber wenn sie erstellt werden ich habe warten die Anzahl der Threads zu spezifizieren, was nicht der Fall mit meiner Anwendung ist. Darüber hinaus aufgrund der Art und Weise der Anwendung implementiert wurde, wäre es schwierig und komplex sein zu schaffen halten / Barrieren jedes Mal zu zerstören.

Ich frage mich, ob es eine andere Möglichkeit ist es, dieses Problem zu lösen.

Vielen Dank!

Veröffentlicht am 18/12/2018 um 11:02
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
0

Dies ist, wie Sie es mit Semaphore erreichen können.

// Global Sempahore initialized to zero.
Sempahore global_sempahore(0)

// Your main thread which spawns your 'n' worker thraeds.
// After spawning 'n' threads your main thread will wait for those threads to finish.
for (int i=0; i<n; i++) {
    global_sempahore.sem_wait();
}


// This is your worker thread routine.
// After processing the common work routine before exiting each thread will signal the sempahore.
global_sempahore.sem_post();

Die Idee ist es, die sempahore in gesperrtem Modus initialisieren mit 0 nach dem Laichen n Worker - Threads in Haupt - Thread wartet auf sempahore für n - mal.

In Arbeiter-Thread kurz vor Austrittsignal des Semaphors.

Dadurch wird sichergestellt , dass Haupt - Thread nur aufwachen , wenn alle n Fäden Ausführung beendet.

Beantwortet am 20/12/2018 um 06:12
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more