je cherche a partager une variable de type int entre deux processus
forkes. comme fork duplique les variables, je me suis dit que
j'allais utiliser un int *. j ai ecrit ca:
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
DINH Viêt Hoà
je cherche a partager une variable de type int entre deux processus forkes. comme fork duplique les variables, je me suis dit que j'allais utiliser un int *. j ai ecrit ca:
fork() ne fait pas que dupliquer les variables, il duplique plutôt les segments de données, tas, pile.
Si tu cherches à partager une variable entre deux processus créés avec fork, il vaut mieux partager la valeur en utilisant un pipe pour communiquer entre eux ou un segment de mémoire partagée.
Mais je suppose que ce que tu cherches à obtenir est la notion de thread, c'est-à-dire, des processus qui partagent les segments de données (mais pas la pile), donc les variables que les threads modifient sont les mêmes.
voir pthread_create() pthread_join()
ainsi que tout ce qui est synchronisation de processus.
par exemple : pthread_mutex_init() pthread_mutex_lock() pthread_mutex_unlock() pthread_mutex_destroy()
-- DINH V. Hoa,
etPan! - newsreader, mail user agent -- http://libetpan.sf.net/etpan
je cherche a partager une variable de type int entre deux processus
forkes. comme fork duplique les variables, je me suis dit que
j'allais utiliser un int *. j ai ecrit ca:
fork() ne fait pas que dupliquer les variables, il duplique plutôt les
segments de données, tas, pile.
Si tu cherches à partager une variable entre deux processus créés avec
fork, il vaut mieux partager la valeur en utilisant un pipe pour
communiquer entre eux ou un segment de mémoire partagée.
Mais je suppose que ce que tu cherches à obtenir est la notion de
thread, c'est-à-dire, des processus qui partagent les segments de
données (mais pas la pile), donc les variables que les threads modifient
sont les mêmes.
voir pthread_create() pthread_join()
ainsi que tout ce qui est synchronisation de processus.
par exemple :
pthread_mutex_init()
pthread_mutex_lock() pthread_mutex_unlock()
pthread_mutex_destroy()
--
DINH V. Hoa,
etPan! - newsreader, mail user agent -- http://libetpan.sf.net/etpan
je cherche a partager une variable de type int entre deux processus forkes. comme fork duplique les variables, je me suis dit que j'allais utiliser un int *. j ai ecrit ca:
fork() ne fait pas que dupliquer les variables, il duplique plutôt les segments de données, tas, pile.
Si tu cherches à partager une variable entre deux processus créés avec fork, il vaut mieux partager la valeur en utilisant un pipe pour communiquer entre eux ou un segment de mémoire partagée.
Mais je suppose que ce que tu cherches à obtenir est la notion de thread, c'est-à-dire, des processus qui partagent les segments de données (mais pas la pile), donc les variables que les threads modifient sont les mêmes.
voir pthread_create() pthread_join()
ainsi que tout ce qui est synchronisation de processus.
par exemple : pthread_mutex_init() pthread_mutex_lock() pthread_mutex_unlock() pthread_mutex_destroy()
-- DINH V. Hoa,
etPan! - newsreader, mail user agent -- http://libetpan.sf.net/etpan
Laurent Wacrenier
Guillaume Desticourt écrit:
je cherche a partager une variable de type int entre deux processus forkes. comme fork duplique les variables, je me suis dit que j'allais utiliser un int *. j ai ecrit ca:
je cherche a partager une variable de type int entre deux processus
forkes. comme fork duplique les variables, je me suis dit que
j'allais utiliser un int *. j ai ecrit ca:
je cherche a partager une variable de type int entre deux processus forkes. comme fork duplique les variables, je me suis dit que j'allais utiliser un int *. j ai ecrit ca:
Attention aux accès concurents. l'écriture et la lecture ne sont pas garanties atomiques (mais ça devrait s'arranger avec des sig_atomic_t)
Guillaume Desticourt
la memoire partagee avec mmap, n est pas utilisable pour mon probleme, car les donnees que je dois partager sont variables. je dois de plus pouvoir modifier l environnment du pere (setenv). pour les threads, le probleme est que je dois faire des execv regulierement, et on me dit que il vaut mieux eviter de conjuguer threads et execv. (si mes souvenirs ne sont pas trop mauvais, execv ecrase tout, qu'advient il alors des variables communes aux deux threads?) bref je pense regler ca en deplacant certains traitements avant de forker... au pire avec un pipe.
merci pour vos explications,
-- Guillaume Desticourt
la memoire partagee avec mmap, n est pas utilisable pour mon probleme,
car les donnees que je dois partager sont variables. je dois de plus
pouvoir modifier l environnment du pere (setenv).
pour les threads, le probleme est que je dois faire des execv
regulierement, et on me dit que il vaut mieux eviter de conjuguer
threads et execv. (si mes souvenirs ne sont pas trop mauvais, execv
ecrase tout, qu'advient il alors des variables communes aux deux
threads?)
bref je pense regler ca en deplacant certains traitements avant de
forker... au pire avec un pipe.
la memoire partagee avec mmap, n est pas utilisable pour mon probleme, car les donnees que je dois partager sont variables. je dois de plus pouvoir modifier l environnment du pere (setenv). pour les threads, le probleme est que je dois faire des execv regulierement, et on me dit que il vaut mieux eviter de conjuguer threads et execv. (si mes souvenirs ne sont pas trop mauvais, execv ecrase tout, qu'advient il alors des variables communes aux deux threads?) bref je pense regler ca en deplacant certains traitements avant de forker... au pire avec un pipe.
merci pour vos explications,
-- Guillaume Desticourt
DINH Viêt Hoà
pour les threads, le probleme est que je dois faire des execv regulierement, et on me dit que il vaut mieux eviter de conjuguer threads et execv. (si mes souvenirs ne sont pas trop mauvais, execv ecrase tout, qu'advient il alors des variables communes aux deux threads?)
le comportement d'exec() combiné avec les threads est spécifié. en cas d'exec(), les threads existant dans le programme en cours sont arrêtées.
Comme en général, tu fais un fork() avant un exec() et que fork() ne duplique pas les threads, je ne vois pas le problème que cela pose.
-- DINH V. Hoa,
etPan! - newsreader, mail user agent -- http://libetpan.sf.net/etpan
pour les threads, le probleme est que je dois faire des execv
regulierement, et on me dit que il vaut mieux eviter de conjuguer
threads et execv. (si mes souvenirs ne sont pas trop mauvais, execv
ecrase tout, qu'advient il alors des variables communes aux deux
threads?)
le comportement d'exec() combiné avec les threads est spécifié.
en cas d'exec(), les threads existant dans le programme en cours sont
arrêtées.
Comme en général, tu fais un fork() avant un exec() et que fork() ne
duplique pas les threads, je ne vois pas le problème que cela pose.
--
DINH V. Hoa,
etPan! - newsreader, mail user agent -- http://libetpan.sf.net/etpan
pour les threads, le probleme est que je dois faire des execv regulierement, et on me dit que il vaut mieux eviter de conjuguer threads et execv. (si mes souvenirs ne sont pas trop mauvais, execv ecrase tout, qu'advient il alors des variables communes aux deux threads?)
le comportement d'exec() combiné avec les threads est spécifié. en cas d'exec(), les threads existant dans le programme en cours sont arrêtées.
Comme en général, tu fais un fork() avant un exec() et que fork() ne duplique pas les threads, je ne vois pas le problème que cela pose.
-- DINH V. Hoa,
etPan! - newsreader, mail user agent -- http://libetpan.sf.net/etpan
Guillaume Desticourt
DINH Viêt Hoà writes:
pour les threads, le probleme est que je dois faire des execv regulierement, et on me dit que il vaut mieux eviter de conjuguer threads et execv. (si mes souvenirs ne sont pas trop mauvais, execv ecrase tout, qu'advient il alors des variables communes aux deux threads?)
le comportement d'exec() combiné avec les threads est spécifié. en cas d'exec(), les threads existant dans le programme en cours sont arrêtées.
Comme en général, tu fais un fork() avant un exec() et que fork() ne duplique pas les threads, je ne vois pas le problème que cela pose. ok. j avais pense remplacer mon fork par des threads. je vois a ta
reponse que ce n est pas ca. il faudrait fork + thread. Mais pour mon probleme precis il m a suffit de deplacer le traitement des donnees a partager avant de forker -ca semble bete a dire mais...
merci pour la precision,
-- Guillaume Desticourt
DINH Viêt Hoà <dinh.viet.hoa@free.fr> writes:
pour les threads, le probleme est que je dois faire des execv
regulierement, et on me dit que il vaut mieux eviter de conjuguer
threads et execv. (si mes souvenirs ne sont pas trop mauvais, execv
ecrase tout, qu'advient il alors des variables communes aux deux
threads?)
le comportement d'exec() combiné avec les threads est spécifié.
en cas d'exec(), les threads existant dans le programme en cours sont
arrêtées.
Comme en général, tu fais un fork() avant un exec() et que fork() ne
duplique pas les threads, je ne vois pas le problème que cela pose.
ok. j avais pense remplacer mon fork par des threads. je vois a ta
reponse que ce n est pas ca. il faudrait fork + thread. Mais pour mon
probleme precis il m a suffit de deplacer le traitement des donnees a
partager avant de forker -ca semble bete a dire mais...
pour les threads, le probleme est que je dois faire des execv regulierement, et on me dit que il vaut mieux eviter de conjuguer threads et execv. (si mes souvenirs ne sont pas trop mauvais, execv ecrase tout, qu'advient il alors des variables communes aux deux threads?)
le comportement d'exec() combiné avec les threads est spécifié. en cas d'exec(), les threads existant dans le programme en cours sont arrêtées.
Comme en général, tu fais un fork() avant un exec() et que fork() ne duplique pas les threads, je ne vois pas le problème que cela pose. ok. j avais pense remplacer mon fork par des threads. je vois a ta
reponse que ce n est pas ca. il faudrait fork + thread. Mais pour mon probleme precis il m a suffit de deplacer le traitement des donnees a partager avant de forker -ca semble bete a dire mais...