hell-student
Lieutenant
- Registriert
- Nov. 2007
- Beiträge
- 671
Hallo Zusammen,
Ich habe einen Threadpool in C implementiert und füge Jobs in eine Linked List ein. Am Head nehme ich die Jobs wieder weg und bearbeite sie dann. Nun will ich mein Programm "fein" wieder aufräumen, aber meine Threads bleiben in der Endlosschleife. Folgender Code:
Worker Thread führt test_calculation aus:
Einfügen neuer Jobs am Ende der Linked List:
Wenn ich nun mein Programm beenden will, hab ich wie gesagt das Problem, dass meine Threads wohl in ihrer While-Schleife hängen, da Head = NULL ist, also kein neuer Job hinzukommt. Wenn ich doch aber per cond_signal alle wartenden Threads wieder aufwecke, müssten die doch weiterlaufen und sich beenden.
Die Main wartet mittels pthread_join auf die Threads.
thx
Ich habe einen Threadpool in C implementiert und füge Jobs in eine Linked List ein. Am Head nehme ich die Jobs wieder weg und bearbeite sie dann. Nun will ich mein Programm "fein" wieder aufräumen, aber meine Threads bleiben in der Endlosschleife. Folgender Code:
Worker Thread führt test_calculation aus:
Code:
void *invade_thread_worker(void *payload __attribute__((unused)))
{
Job *job;
status_t status;
for(;;) {
pthread_mutex_lock(&invade_job_mutex);
while(!(job = head)) {
pthread_cond_wait(&invade_job_cond, &invade_job_mutex);
if (prog-stop) break;
}
if (prog-stop) break;
head = head->next;
pthread_mutex_unlock(&invade_job_mutex);
// work on job
if (job->status == PENDING) {
job->status = WORKING;
status = test_calculation(job);
if (job->status == WORKING) {
job->status = status;
}
if(job->status == SUCCESS) {
}
else if(job->status == CANCELED) {
}
}
}
//cleanupcode
return NULL;
}
Einfügen neuer Jobs am Ende der Linked List:
Code:
void enqueue_job(int index)
{
pthread_mutex_lock(&invade_job_mutex);
add_to_list(index);
pthread_cond_signal(&invade_job_cond);
pthread_mutex_unlock(&invade_job_mutex);
}
Wenn ich nun mein Programm beenden will, hab ich wie gesagt das Problem, dass meine Threads wohl in ihrer While-Schleife hängen, da Head = NULL ist, also kein neuer Job hinzukommt. Wenn ich doch aber per cond_signal alle wartenden Threads wieder aufwecke, müssten die doch weiterlaufen und sich beenden.
Die Main wartet mittels pthread_join auf die Threads.
thx