D'apres ce que j'ai compris des threads, c'est qu'ils font partie du meme processus
Oui, ils vivent dans le même espace mémoire virtuel.
mais ils possedent chacun leurs propres piles (stack).
Oui, allouées dans cet espace.
Donc les Threads peuvent lire des variables dans le tas ou dans la zones ou sont stockés les variables globales,
De fait, ils peuvent lire des variables allouées dans l'espace mémoire dédié au processus.
mais il n'est pas possible de lire une variable dans la pile d'un autre thread sans déclencher un segfault.
Ah ? D'où tenez vous cette assertion ?
Votre programme, qui est tout à fait valide, est la preuve du contraire.
Le risque avec les threads est de mal maîtriser les flux d’exécution et de demander à accéder à une variable qui a été libérée, que soit parce qu'elle était dans le scope d'un thread qui s'est terminé ou parce qu'elle a été libérée explicitement.
Et même là, le risque de segfault est faible, vous allez probablement taper dans un espace toujours réservé pour votre processus. Par contre, pour ce qui est de la valeur que vous allez récupérer, ça dépendra du sens du vent.
#include<stdio.h>#include<stdlib.h>#include<pthread.h>#include<unistd.h>void*g(void*arg){intvalue=*((int*)arg);sleep(2);fprintf(stdout,"thread g : &value = %p ; value = %i\n",arg,value);returnNULL;}void*f(void*arg){pthread_tt;intvalue=*((int*)arg);pthread_create(&t,NULL,g,(void*)&value);sleep(1);fprintf(stdout,"thread f: &value = %p ; value = %i\n",arg,value);printf("bye thread f\n");returnNULL;}intmain(intargc,charconst*argv[]){pthread_tt;int*value=malloc(sizeof(int));*value=6;printf("&value = %p ; value = %i\n",value,*value);pthread_create(&t,NULL,f,value);free(value);value=NULL;printf("value freed\n");pthread_join(t,NULL);sleep(5);return0;}
# espace utilisateur
Posté par David Marec . En réponse au message probleme avec le fonctionnement d'un thread. Évalué à 4. Dernière modification le 13 octobre 2019 à 15:39.
Oui, ils vivent dans le même espace mémoire virtuel.
Oui, allouées dans cet espace.
De fait, ils peuvent lire des variables allouées dans l'espace mémoire dédié au processus.
Ah ? D'où tenez vous cette assertion ?
Votre programme, qui est tout à fait valide, est la preuve du contraire.
Le risque avec les threads est de mal maîtriser les flux d’exécution et de demander à accéder à une variable qui a été libérée, que soit parce qu'elle était dans le scope d'un thread qui s'est terminé ou parce qu'elle a été libérée explicitement.
Et même là, le risque de segfault est faible, vous allez probablement taper dans un espace toujours réservé pour votre processus. Par contre, pour ce qui est de la valeur que vous allez récupérer, ça dépendra du sens du vent.