Variable partagé entre processus

Signaler
Messages postés
33
Date d'inscription
lundi 19 juin 2006
Statut
Membre
Dernière intervention
15 novembre 2007
-
Messages postés
1
Date d'inscription
samedi 14 novembre 2009
Statut
Membre
Dernière intervention
14 novembre 2009
-
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

Messages postés
33
Date d'inscription
lundi 19 juin 2006
Statut
Membre
Dernière intervention
15 novembre 2007

je ne peux utiliser ni les semaphores ni la memoire partagé , seulement les pipes et signaux
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
35
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?
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
35
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;
}
Messages postés
33
Date d'inscription
lundi 19 juin 2006
Statut
Membre
Dernière intervention
15 novembre 2007

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
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
35
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;
}
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
35
Salut:

Pardon, tu peux supprimer le memset c'est sans importance.
Messages postés
33
Date d'inscription
lundi 19 juin 2006
Statut
Membre
Dernière intervention
15 novembre 2007

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
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
16
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
Messages postés
1
Date d'inscription
samedi 14 novembre 2009
Statut
Membre
Dernière intervention
14 novembre 2009

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.