Partage
  • Partager sur Facebook
  • Partager sur Twitter

Passage d'argument pthread_create

différence entre argument automatique et dynamique

    30 octobre 2018 à 22:08:35

    Salut à tous, 

    Je suis un peu perdu avec la fonction pthread_create(arg1, arg2, arg3, arg4) pour l'arg4.

    c'est quoi la différence entre une structure automatique par rapport au passage d'une structure dynamique ?

    Et quels sont les problèmes pouvant survenir si on ne passe pas une structure dynamique ?

    Merci d'avance, si vous pouvez me répondre très rapidement ça m'arrangerai grandement !

    • Partager sur Facebook
    • Partager sur Twitter
      30 octobre 2018 à 23:00:54

      Pour commencer, en C++, tu peux l'interface pthread et utiliser std::thread.

      Je suppose que tu parles de la différence entre une variable allouer dynamique et une variable sur la pile. Une variable de pile à une portée restreinte à la paire de {}, on parle de scope. En fin de portée, elle est automatiquement détruite contrairement à une variable allouer dynamiquement qui l'est qu'après un appel explicite à delete/delete[] (ou free en C), on appelle cette zone mémoire le tas.

      Lorsque le thread se lance, la fonction reçoit une référence sur la valeur (arg4 pour phread_create), or un thread tourne en parallèle au reste du code et l'appelant de ptrhread_create à tout le temps nécessaire pour sortir du scope et supprimer la valeur associé à arg4. Le compilateur va considérer que l'espace préalablement réserve par la variable est maintenant libre pour y mettre n'importe quoi. Tu imagines bien que s'il met n'importe quoi, le thread ferra n'importe quoi.

      L'avantage du tas, c'est qu'on peut mettre et enlever n'importe quand une variable. Ainsi, on est sûr que les valeurs ne sont pas libérées pendant l’exécution du thread. Par contre, il faudra le faire nous même puisque personne ne va le faire à notre place.

      Note qu'on peut utiliser une variable sur la pile si on garantit que le thread s'arrête avant de sortir du scope.

      • Partager sur Facebook
      • Partager sur Twitter
        30 octobre 2018 à 23:24:35

        Est ce que ça à un rapport avec ça ?
        "Le passage d'une structure automatique va déterminer au moment de la compilation un espace mémoire fixe à l'argument. De manière dynamique, on va pouvoir mettre un objet de la taille qu'on veut.
        Le fait d'utiliser un structure dynamique va permettre à celle ci d'évoluer au cours de l'exécution main, de ne pas avoir de taille prédéfinie par le compilateur car en fonction du moment ou l'on lance thread_client, le client ne sera pas identique à chaque pthread_create
        la ligne */ client *  c = (client*) malloc(sizeof(client)); /* de getClient alloue une taille différente et ne peut pas être sue au moment de la compilation. Ainsi, on évite l'erreur stack overflow"
        • Partager sur Facebook
        • Partager sur Twitter
          30 octobre 2018 à 23:44:11

          Oui, mais les explications sont fumeuses. Une structure à toujours une taille prédéfinie par le compilateur et malloc(sizeof(client)); alloue toujours un bloc mémoire de la même taille. L'auteur confond taille différente et emplacement mémoire différent.

          -
          Edité par jo_link_noir 30 octobre 2018 à 23:44:43

          • Partager sur Facebook
          • Partager sur Twitter

          Passage d'argument pthread_create

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown