Je suis relativement novice en matière de threads et de forks. Pour les comprendre un peu mieux, j'ai donc écrit des programmes simples. Parmi ces petits programmes, j'ai écrit deux programmes, l'un pour imprimer un compteur sur deux processus, et un autre avec deux threads. Ce que j'ai remarqué, c'est que la fourche imprime les compteurs entrelacés alors que le thread imprime le compteur d'un thread puis des autres. Ainsi, le thread n'est pas si parallèle, mais se comporte plus en série Pourquoi ? Est-ce que je fais quelque chose de mal ?
Par ailleurs, que fait exactement pthread_join ? Même lorsque je ne fais pas pthread_join, le programme s'exécute de la même manière.
Voici mon code pour le fil
void * thread1(void *a){
int i =0;
for(i=0; i<100; i++)
printf("Thread 1 %d\n",i);
}
void * thread2(void *b){
int i =0;
for(i=0; i<100; i++)
printf("Thread 2 %d\n", i);
}
int main()
{
pthread_t tid1,tid2;
pthread_create(&tid1,NULL,thread1, NULL);
pthread_create(&tid2,NULL,thread2, NULL);
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
return 0;
}
Et voici mon code pour la fourchette
int main(void)
{
pid_t childPID;
childPID = fork();
if(childPID >= 0) // fork was successful
{
if(childPID == 0) // child process
{ int i;
for(i=0; i<100;i++)
printf("\n Child Process Counter : %d\n",i);
}
else //Parent process
{
int i;
for(i=0; i<100;i++)
printf("\n Parent Process Counter : %d\n",i);
}
}
else // fork failed
{
printf("\n Fork failed, quitting!!!!!!\n");
return 1;
}
return 0;
}
EDIT : Comment puis-je faire en sorte que le programme threadé se comporte plus comme le programme fork ? c'est-à-dire que les impressions du compteur s'entrecroisent.