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

C Discussion :

Fonctionnement des threads


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 30
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 52
    Points : 29
    Points
    29
    Par défaut Fonctionnement des threads
    Bonjour à tous

    voila je suis souvent amené à utiliser les threads dans certains de mes programmes quand je ne peux pas utiliser select(). Mais j'aimerai mieux comprendre comment ça fonctionne !
    Pour cela je me suis dis que j'allais coder ma propre bibliothèque pour faire des threads (Mais il est fou ) Voila je sais pas trop si c'est réalisable facilement ou non mais quoi qu'il en soit ça me gène d'utiliser une fonction lorsque je ne sais pas comment ça fonctionne derrière.

    Donc voila je suis décidé à faire ma propre fonction de thread Mais... Par où commencer ? Je conçois mal comment ça fonctionne
    Je dois plus regarder dans la programmation système je suppose non ?

    Merci à vous d'avoir pris attention à mon poste

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Il est pratiquement impossible de faire du multithreading sans l'aide du kernel.
    De plus, le seul fait que chaque thread possède sa propre pile rend nécessaire l'utilisation d'un langage de plus bas niveau que le C à un endroit ou un autre (généralement dans le kernel lui-même, pour que les programmeurs C n'aient pas à se soucier de ça).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Bonsoir,

    Citation Envoyé par AddicTion Voir le message
    Pour cela je me suis dis que j'allais coder ma propre bibliothèque pour faire des threads (Mais il est fou )
    Si tu as une idée du travail gigantesque que cela peut impliquer et que c'est pour l'exercice, c'est plutôt une bonne chose.

    Voila je sais pas trop si c'est réalisable facilement ou non mais quoi qu'il en soit ça me gène d'utiliser une fonction lorsque je ne sais pas comment ça fonctionne derrière.
    C'est une TRÈS bonne chose ! :-)

    Donc voila je suis décidé à faire ma propre fonction de thread Mais... Par où commencer ? Je conçois mal comment ça fonctionne Je dois plus regarder dans la programmation système je suppose non ?
    Qu'est-ce que tu conçois mal ? Comment fonctionnent les threads en général et d'un point de vue théorique (pourtant tu t'en sers souvent) ou bien sur quoi s'appuie la bibliothèque de threads que tu utilises ?

    Médinoc a raison : il est presqu'impossible de réécrire une bibliothèque de threads vraiment utile sans s'appuyer sur le avec le kernel. C'est un peu comme si tu voulais réécrire select() en user space. À partir du moment où c'est le noyau qui conserve la main dès lors que tu fais un appel bloquant, c'est à lui qu'il faut signaler que tu souhaites surveiller plusieurs descripteurs à la fois et, donc, il faut qu'il te propose un appel pour le faire.

    Sous Linux, il existe clone(), qui sert à créer un nouveau processus en précisant à la carte ce qui doit être commun avec le processus père et ce qui doit être distinct.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    D'ailleurs, le multithreading sous Linux se repose sur clone(): En fait, les "threads" sous Linux sont des processus qui partagent leur mémoire (d'où la pertinence du nom français, "processus légers").

    Sous Windows, les threads et processus sont tous deux connus du kernel, où chaque processus possède au moins un thread (quand le dernier thread d'un processus se termine, le processus se termine aussi).


    Note que j'ai dit "pratiquement impossible" parce que ça ne l'est pas complètement: Il me semble qu'avant la NPTL, pthread faisait des threads userspace, sans doute en utilisant les signaux (comme SIGALRM) et du code assembleur pour passer d'un thread à l'autre toutes les X millisecondes.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Mai 2013
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2013
    Messages : 42
    Points : 80
    Points
    80
    Par défaut Salut
    Mon apport ne sera peut-etre pas tres constructif, mais c est une des frustrations au quelles on se voit forcement confronté un jour, à savoir : On n a peut pas tout faire, et ca se verifie encore plus en informatique.

    1. il y a des fonctions que vraiment pour ta survie il vaudrait mieux ne pas trop chercher a comprendre comment elles sont faite. Pour ma part je cherche a comprendre comment les utilisé de maniere optimale, et une bonne connaissance theorique ( pour le cas cité , la gestion des taches dans different SE ).

    2. Oui parfois j ai reeinventer la roue, et je conseille fortement d en faire de meme, ce que je dis la peut paraitre contradictoire avec le point 1. Mais ca ne l ai pas. Je conseille le point 2, si et seulement si, la fonction en question fait partie de ton domaine de specialisation. en l espece , si t es un developpeur systeme, ou si tu developpe des kernel.

    Donc si c est ton domaine de specialisation , vas-y mon loulou , je te fais un mot gentil , parceque la suite ne sera pas forcement facile .
    Sinon , refere toi au point 1. , ce serai vraiment du gaspille d energie a mon humble avis .

    Dans tout les cas du courage .

  6. #6
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par AddicTion Voir le message
    Donc voila je suis décidé à faire ma propre fonction de thread Mais... Par où commencer ? Je conçois mal comment ça fonctionne
    Je dois plus regarder dans la programmation système je suppose non ?
    cela me semble difficile et inutile...les threads c'est du ressort du système d'exploitation comme le précisent Obidian et Médinoc.
    Ou alors je n'ai pas compris ce que tu veux faire..
    A moins d'aller bricoler en assembleur le noyau mais là tu vas tout exploser parce que tu ne seras pas synchro avec le reste de l'OS

Discussions similaires

  1. le fonctionnement des thread
    Par Etudiante_Ines dans le forum Général Java
    Réponses: 3
    Dernier message: 12/03/2012, 10h20
  2. fonctionnement des threads
    Par Beltegeuse dans le forum POSIX
    Réponses: 9
    Dernier message: 06/05/2010, 15h24
  3. Croisements de threads / Fonctionnement des "delegate"
    Par Fabllot dans le forum C++/CLI
    Réponses: 3
    Dernier message: 18/07/2007, 12h18
  4. [reseaux] Gestion des threads en perl
    Par totox17 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 28/11/2002, 09h40
  5. Programmer des threads
    Par haypo dans le forum C
    Réponses: 6
    Dernier message: 02/07/2002, 13h53

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