Hello tous,
Je débute en C, j'ai un p'tit devoir maison à faire et je bug sur une question...
Si vous pouviez me donner votre avis ça serait top !
On me donne ce code :
Et les questions sont les suivantes...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 #include <pthread.h> #include <stdio.h> int value = 0; /* The thread will begin control in this function */ void *runner(void *param) { value = 5; pthread_exit(0); } int main(int argc, char *argv[]) { int pid; pthread_t tid; /* the thread identifier */ pid = fork(); if (!pid) { /* Child process */ pthread_create(&tid, &attr, runner, NULL); pthread_join(tid, NULL); printf("CHILD : value = %d\n", value); /* LINE C */ } else { /* Parent process */ wait(NULL); printf("PARENT: value = %d\n", value); /* LINE P */ } }
Bon, je vous la fait courte, voici ce que j'ai répondu :
- Décrire l’action de pid = fork();
On fork le processus appelant, il va ainsi se dupliquer. Dans le processus père pid sera égal à 0 (retourné par le fork) tandis que dans le processus fils on aura pid = pid du fils.- Décrire l’action de pthread_create (...);
Là ben je renvoie vers le manuel et j'explique un peu (qu'on crée le thread tid numéro untel)- Qu’est ce qui est affichées dans les lignes LINE C et LINE P? Expliquez
Bon ben là je bug, pour moi le code proposé est faux et ils ont inversé le père et le fils...
Merci de me corriger ou me confirmer.
Dans le process père (pid 0) on lance la fonction runner en créant le thread, tandis que dans le fils ben on ne fait qu'afficher la value.- Quel résultat génère-t-on si on remplace wait() par pthread_join()?
Ben la pour moi ça boucle, il faut stopper le process avec ctrl + C
Mon intuition me dit que le thread du père n’est pas joignable depuis le fils s’agissant de deux processus distincts. (le vrais fils donc, pas celui comme indiqué dans le code)
Voilà merci pour tout et la bise à mes collègues s'ils atterrissent sur ce post en réalisant leur tp![]()
Partager