Я приближаюсь к pthreads в C, и я начинаю писать очень тупые программы, чтобы их повесить. Я попытался создать программу, содержащую два потока, они должны печатать свое имя, и их статус должен быть собран, поскольку они завершают их выполнение. Так что мой код:Неверное возвращаемое значение после завершения потока
//Function declaration
void *state_your_name(char*);
//Function definition
//Passing a string as parameter for
//outputting the name of the thread
void *state_your_name(char *name) {
//Declaration of the variable containing the return status
void* status;
//Printing out the string
printf("%s\n", name);
//Exiting the thread and saving the return value
pthread_exit(status);
}
int main(void) {
pthread_t tid_1, tid_2;
void * status;
//Creating thread 1...
if (pthread_create(&tid_1, NULL, state_your_name, "Thread 1")) {
printf("Error creating thread 1");
exit(1);
}
//Creating thread 2...
if (pthread_create(&tid_2, NULL, state_your_name, "Thread 2")) {
printf("Error creating thread 2");
exit(1);
}
//Waiting for thread 1 to terminate and
//collecting the return value...
if (pthread_join(tid_1, (void *) &status)) {
printf("Error joining thread 1");
exit(1);
}
printf("Thread 1 - Return value: %d\n", (int)status);
//Waiting for thread 2 to terminate and
//collecting the return value...
if (pthread_join(tid_2, (void *) &status)) {
printf("Error joining thread 2");
exit(1);
}
printf("Thread 2 - Return value: %d\n", (int)status);
return 0;
}
Я хотел бы ожидать выход так:
Thread 1
Thread 2
Thread 1 - Return value: 0
Thread 2 - Return value: 0
но мой вопрос заключается возвращаемое значение Thread 1
является 733029576
, но Thread 2
возвращает 0
как предсказывал; это как переменная статуса неинициализирована и содержит мусор. Что мне не хватает?
D'о, вы никогда не инициализировать 'status'. Так что это просто неопределенное поведение. –
Как вы определяете, какое значение возвращаемого значения thread1 имеет это значение? – Nicholaz