Variable partagé entre processus

cs_facilus Messages postés 33 Date d'inscription lundi 19 juin 2006 Statut Membre Dernière intervention 15 novembre 2007 - 9 déc. 2006 à 21:04
insafunix Messages postés 1 Date d'inscription samedi 14 novembre 2009 Statut Membre Dernière intervention 14 novembre 2009 - 14 nov. 2009 à 11:49
Bonjour,

j'ai fais un programme en c sous unix qui consiste a creer 3 fils (avec fork) , j'ai declaré 2 variables globales leur valeurs doivent etre les memes pour tous les processus creer :

int index[3] , initialisé a -1;
int nb=0;

a chaque creation d'un processus fils j'incremente la variable nb é je modifie le tableau index , apres la creation du 3 fils normalement j'aurai : nb=3 et index(1,2,3); le probleme é ke pour le 1er fils le contenu de nb reste 1 é index(1,0,0) , pour le 2eme fils nb=2 et index(1,2,0) pour le 3eme nb=3 et index(1,2,3) .

comment faire pour que les 3 fils doivent avoir le meme contenu des variables globals (nb=3 et index(1,2,3) ) ?

voici la portion du code :
void main ()
{
  for(i=1;i<3;i++) {
  fork();
  nb++;
  index[i-1]=i;
}

Merci

9 réponses

cs_facilus Messages postés 33 Date d'inscription lundi 19 juin 2006 Statut Membre Dernière intervention 15 novembre 2007
9 déc. 2006 à 21:10
je ne peux utiliser ni les semaphores ni la memoire partagé , seulement les pipes et signaux
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
9 déc. 2006 à 22:18
Salut:

Ton problème est mal expliqué.
Qu'est ce que tu veux précisement et qu'est ce que tu as trouvé comme résultat?
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
9 déc. 2006 à 22:29
Salut:

Essaye ceci:

int nb = 0;
int index [3] = {-1, -1, -1};

int main ()
{
    for(i=0;i<3;i++) {
        // Création d'un processus fils
        fork();
        nb++;
        index[i] = i+1;
        // Fin
    }
    return o;
}
0
cs_facilus Messages postés 33 Date d'inscription lundi 19 juin 2006 Statut Membre Dernière intervention 15 novembre 2007
9 déc. 2006 à 22:40
le resultat est : lorsque je cree seulement le derniers fils (3eme) , é j'affiche le nb é le tableau pour le 1er  et le 2eme fils je trouve ke pour le 1er : il affiche nb = 1, {1,-1,-1} et le 2eme : nb=2 , {1,2,-1}, je ve ke le 1er, 2eme et 3eme fils affiche la meme chose cad :

nb=3 et {1,2,3}cad afficher ce ke le dernier fils a modifier.
merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
9 déc. 2006 à 22:49
Salut:
Si tu veux afficher nb 3 et index {1, 2, 3} pour les 3 processus (Bienque je ne comprends pas pourquoi faire ça):


int nb = 0;
int index [3];

int main ()
{
    for(i=0;i<3;i++) {
        // Création d'un processus fils
        memset (index, -1, sizeof (index));
        fork();
       
        for (int j=0; j<3; ++j)
            index [j] = j+1;

        nb++;
       
        // Fin
    }
    return o;
}
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
9 déc. 2006 à 22:50
Salut:

Pardon, tu peux supprimer le memset c'est sans importance.
0
cs_facilus Messages postés 33 Date d'inscription lundi 19 juin 2006 Statut Membre Dernière intervention 15 novembre 2007
9 déc. 2006 à 23:56
je fé ca pour : a chaque fois qu'un client se connecte vers le serveur je fé un fork , je sauvegarde l'identifiant du client dan le tableau index (variable global) ensuite lorske le serveur diffuse un message a tt les cliens connécté il teste combiel y'a t'il de clients conécté (la variable globale nb) é parcoure le tableau index pour envoyer a chake client qui existe dan le tableau.
lorsque le 1er client se connecte : nb 1> faire un fork pour traiter le client seul
lorsque le 2eme client se connecte nb = 2;==>faire fork ....lorsque le 3eme client se connecte nb 3;>faire fork .....

lorsque par exemple le 2eme client envoi un message il trouve ke le nb = 2 pas a 3 ???
j'espere ke jé bien expliké ,sinon je detaillerai plus
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
13 déc. 2006 à 23:08
salut,

moi je dirais que tu peux faire ça avec uniquement des signaux :
-> SIG_USR1 : handler incrémente nb
-> SIG_USR2 : handler décrémente nb
-> SIG_CHILD (dans le père) : envoit SIG_USR2 à tout le groupe de processus : kill(0,SIG_USR2)

ensuite lorsque le parent se lance, appelles setpgrp() pour créer un groupe de processus
lorsque tu fais ton fork, dans le fils ou dans le père mais pas dans les deux, appelles kill(0,SIG_USR1)

ShareVB
0
insafunix Messages postés 1 Date d'inscription samedi 14 novembre 2009 Statut Membre Dernière intervention 14 novembre 2009
14 nov. 2009 à 11:49
bonjour,j'essaye de créer un programme C qui crée deux fils l'un affiche les entiers de 1à100 et l'autre de 101 à 200 en utilisant FORK mais je n'arrive pas.
0
Rejoignez-nous