Verzeihen Sie, ich beginne gerade das Konzept des Multithreading, ich habe mich nur gewundert, warum meine Threads möglicherweise schon beendet sind, bevor sie sich verbinden. Im Grunde habe ich eine globale Liste von Prozess-IDs bin beibehalten, ich sie iterativ durch den Aufruf erstellenThreads, die vor dem Beitritt beendet werden
if(pthread_create(&thread_id[i], NULL, function_to_execute, NULL)) {
fprintf(stderr, "error thread not created\n");
}
Das Problem ist jetzt, alle meine Fäden austreten, bevor sie an meine Pthread beitreten bekommen
pthread_join(thread_id[i], NULL);
die ist tief in einem Funktionsaufruf verschachtelt, der direkt nach der Erstellung der Threads aufgerufen wird. Ich bin mir nicht sicher, ob ich etwas locking oder etwas tun soll, oder füge einen zusätzlichen Befehl hinzu, um sicherzustellen, dass die Threads vor dem Beenden auf die Join-Anweisung warten.
Es hängt von 'function_to_execute' ab. Vielleicht wirft es eine Ausnahme? Und wie kannst du sagen, dass sie aussteigen, bevor sie 'Join' erreichen? Vielleicht sind sie in Endlosschleife oder etwas – AhmadWabbi
Es gibt kein Problem, wenn der Thread, mit dem Sie 'pthread_join()' sind, bereits beendet wurde. In diesem Fall wird der 'pthread_join()' sofort zurückkehren, während er ansonsten warten muss. * Allerdings *: Sie * müssen * nicht versuchen, 'pthread_join()' mit einem Thread zu bearbeiten, der bereits 'pthread_join()' ed oder 'pthread_detach()' ed ist. – EOF
sehr gut Threading Tutorial: https://computing.llnl.gov/tutorials/pthreads/ – yano