lint
(usa Slackware)
Enviado em 03/06/2012 - 17:58h
Tem dois problemas no seu código:
A declaração do thread filho deve passar um ponteiro void, o que é diferente de simplesmente void.
void* filho() é o mesmo que void* filho(void), mas ambos são diferentes de void* filho(void *argumento), o segundo aceita um ponteiro como argumento.
Fora isso é apropriado incluir a unistd.h, para que você possa usar a função sleep().
Segue o código que eu compilei aqui:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
void* filho(void *arg){
printf("Iniciando Filho.\n");
sleep(5);
printf("Encerrando Filho.\n");
}
int main(){
pthread_t id_thread;
system("clear");
printf("Iniciando Pai.\n");
pthread_create(&id_thread, NULL, filho, NULL);
printf("Encerrando Pai.\n");
return 0;
}
Mas veja que o thread filho possivelmente nunca vai executar, pois o thread principal (pai) acaba poucos instantes depois do spawn do thread filho, e o filho morre por tabela, pelo menos é homicídio culposo.
Se você colocar um sleep(6) no final do programa você deve ver a saída que você está esperando afterall...