IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

POSIX C Discussion :

fork garantir la suite d'instruction


Sujet :

POSIX C

  1. #1
    Membre actif Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 225
    Points
    225
    Par défaut garantir la suite d'instructions
    Bonsoir,

    Est-ce possible de garantir qu'un bloc d'instruction appartenant soit traîté en un coup.
    Exemple:
    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
     
    int k=0;
    while(k<10)
    {
      if(fork())
      {
        printf("%d\n",k);
        printf("%d\n",k);
        printf("%d\n",k);
        printf("%d\n",k);
        printf("%d\n",k);
        printf("%d\n",k);
        printf("%d\n",k);
        printf("%d\n",k);
        printf("%d\n",k);
        exit(0);
      }
      k++;
    }
    Ainsi, rien ne garantit que les printf de mêmes nombres soient ensembles.
    Au niveau de l'asm, rien n'est parallèle de toute façon, comment faire pour que les syscall soient groupés au niveau asm ?
    Wer nicht probiert, verliert !!

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par je®ome Voir le message
    Bonsoir,

    Est-ce possible de garantir qu'un bloc d'instruction appartenant soit traîté en un coup.
    Exemple:
    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
     
    int k=0;
    while(k<10)
    {
      if(fork())
      {
        printf("%d\n",k);
        printf("%d\n",k);
        printf("%d\n",k);
        printf("%d\n",k);
        printf("%d\n",k);
        printf("%d\n",k);
        printf("%d\n",k);
        printf("%d\n",k);
        printf("%d\n",k);
        exit(0);
      }
      k++;
    }
    Ainsi, rien ne garantit que les printf de mêmes nombres soient ensembles.
    Au niveau de l'asm, rien n'est parallèle de toute façon, comment faire pour que les syscall soient groupés au niveau asm ?
    Au niveau "parallélisme" t'as rien de garanti. C'est l'ordonanceur qui gère les processus.
    Tu peux blouser le truc en mettant un "sleep(1)" quand tu veux ralentir un processus. Sinon faut que tu te programmes toi-même le truc (à coup de signaux par exemple)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    Salut,
    Je suis pas un expert dans le domaine mais pourquoi t'utilises pas les trucs qui permettent de realiser une exclusion mutuelle ?
    Je pense à un pipe de communication entre pere et fils, yen a un qui serait bloqué tant que l'autre n'aurait pas lu dans le pipe, ou vice versa

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 149
    Points : 28 116
    Points
    28 116
    Par défaut
    Bonjour,

    Tout d'abord, l'appel à fork() peut échouer - il est donc nécessaire de tester le code de retour.

    Par ailleurs, ce même code de retour te permet de différencier le père du fils (cf page de man), ce qui
    sera peut-être suffisant pour faire ce que tu souhaites.

    Sinon, exposes-nous plus les raisons qui te poussent à vouloir exécuter plusieurs commandes "en même temps", et peut-être que des solutions apparaîtront (comme par exemple l'utilisation de sémaphores proposée ci-dessus).
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  5. #5
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Citation Envoyé par je®ome Voir le message
    Bonsoir,

    Est-ce possible de garantir qu'un bloc d'instruction appartenant soit traîté en un coup.
    Exemple:
    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
     
    int k=0;
    while(k<10)
    {
      if(fork())
      {
        printf("%d\n",k);
        printf("%d\n",k);
        printf("%d\n",k);
        printf("%d\n",k);
        printf("%d\n",k);
        printf("%d\n",k);
        printf("%d\n",k);
        printf("%d\n",k);
        printf("%d\n",k);
        exit(0);
      }
      k++;
    }
    Ainsi, rien ne garantit que les printf de mêmes nombres soient ensembles.
    Sémaphore, mutex, futex, pipe, etc.
    Au niveau de l'asm, rien n'est parallèle de toute façon, comment faire pour que les syscall soient groupés au niveau asm ?
    Faux.
    Tu as beau être au "niveau asm", c'est ton ordonnanceur (intrinsèquement dépendant de ton système) qui gère tes processus.
    La seule façon d'éviter un entrelacement, ce serait de masquer les interruptions sur ta machine.
    Je te renvoie à n'importe quel cours d'ordonnancement pour en comprendre les implications.
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par gangsoleil Voir le message
    Sinon, exposes-nous plus les raisons qui te poussent à vouloir exécuter plusieurs commandes "en même temps", et peut-être que des solutions apparaîtront (comme par exemple l'utilisation de sémaphores proposée ci-dessus).
    Surtout que pour garantir qu'un groupe de commande "X" sera exécuté avant un groupe de commandes "Y" il suffit de placer le groupe "X" et "Y" dans le même processus et les placer de façon à ce que la séquence corresponde à ce que l'on veut obtenir...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Membre actif Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 225
    Points
    225
    Par défaut
    Bonne année, merci pour ces nombreuses réponses.

    Citation Envoyé par Gruik Voir le message
    Salut,
    Je suis pas un expert dans le domaine mais pourquoi t'utilises pas les trucs qui permettent de realiser une exclusion mutuelle ?
    Je pense à un pipe de communication entre pere et fils, yen a un qui serait bloqué tant que l'autre n'aurait pas lu dans le pipe, ou vice versa
    Si 1 processus possède 100 fils, il faudrait donc faire bloquer 99 processus sur un read, il leur faudrait également un 2ième pipe à chacun pour acquitter. D'après ce que je sais, le nombre de descripteur est limité par processus, on est déjà à 200...
    Je ne suis pas persuadé de ce type de solution.

    Citation Envoyé par gangsoleil Voir le message
    Bonjour,

    Tout d'abord, l'appel à fork() peut échouer - il est donc nécessaire de tester le code de retour.

    Par ailleurs, ce même code de retour te permet de différencier le père du fils (cf page de man), ce qui
    sera peut-être suffisant pour faire ce que tu souhaites.
    J'ai lu la man avant de commencer
    Ceci n'était qu'un exemple d'illustration.
    Citation Envoyé par gangsoleil Voir le message
    Sinon, exposes-nous plus les raisons qui te poussent à vouloir exécuter plusieurs commandes "en même temps", et peut-être que des solutions apparaîtront (comme par exemple l'utilisation de sémaphores proposée ci-dessus).
    C'est une simple question de curiosité. Je n'ai pas d'exemple précis à donner, mais je pense à des tâches dépendantes les unes des autres.
    Citation Envoyé par Pouic Voir le message
    Faux.
    Tu as beau être au "niveau asm", c'est ton ordonnanceur (intrinsèquement dépendant de ton système) qui gère tes processus.
    La seule façon d'éviter un entrelacement, ce serait de masquer les interruptions sur ta machine.
    Je te renvoie à n'importe quel cours d'ordonnancement pour en comprendre les implications.
    Merci, je vais étudier cela.
    Citation Envoyé par Sve@r Voir le message
    Surtout que pour garantir qu'un groupe de commande "X" sera exécuté avant un groupe de commandes "Y" il suffit de placer le groupe "X" et "Y" dans le même processus et les placer de façon à ce que la séquence corresponde à ce que l'on veut obtenir...
    Il existe des cas où il n'est pas toujours possible de faire tout dans le même processus, par exemple quand la durée de vie du processus est trop petite.
    Wer nicht probiert, verliert !!

Discussions similaires

  1. Réponses: 0
    Dernier message: 19/10/2007, 16h36
  2. Réponses: 2
    Dernier message: 06/03/2007, 07h02
  3. Suite d'instructions la plus courte possible
    Par didine_napster dans le forum Assembleur
    Réponses: 6
    Dernier message: 13/02/2007, 10h46
  4. [DOS] suite d'instructions en dos dans une condition if
    Par hbendali dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 06/03/2006, 16h45
  5. [Système] Suite d'instructions non interrompue
    Par hyperion dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 19/07/2004, 11h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo