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 :

les threads : comment ça fonctionne ?


Sujet :

C

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 841
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 841
    Points : 1 010
    Points
    1 010
    Par défaut les threads : comment ça fonctionne ?
    Bonjour,

    voici un petit exemple d'utilisation de thread :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    // On inclue les fichiers standard et le header pthread.h
    #include <stdlib.h>
    #include <stdio.h>
    #include <pthread.h>
     
    void* maFonction(void* data);
     
     
     
    int main()
    {
        int i;
     
        pthread_t thread;// On crée un thread
        pthread_create(&thread, NULL, maFonction, NULL);// Permet d'exécuter le fonction maFonction en parallèle
     
        // Affiche 50 fois 1
        for(i=0 ; i<50 ; i++)
            printf("1");
     
        // Attend la fin du thread créé
        pthread_join(thread, NULL);
        return 0;
    }
     
     
    void* maFonction(void* data)
    {
        int i;
     
        // Affiche 50 fois 2
        for(i=0 ; i<50 ; i++)
            printf("2");
     
        return NULL;
    }
    Est-ce que quelqu'un peut m'expliquer comment ça fonctionne exactement une library de ce type ? => je n'arrive pas à comprendre comment dans le bout de code suivant (dans le main), le programme bascule sur le code de la fonction du thread puis revient dans la boucle (il n'y a aucuns tests qui permet d'interrompre la boucle) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        // Affiche 50 fois 1
        for(i=0 ; i<50 ; i++)
            printf("1");

    si vous avez un exemple simplifié/commenté de ce type de library je suis preneur ...

  2. #2
    Membre confirmé
    Avatar de haraelendil
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2004
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 283
    Points : 533
    Points
    533
    Par défaut
    Bah c'est justement le but même des threads, créer un thread revient (en gros) à créer un autre bout de programme qui va tourner en parallèle à ta fonction main.

    Bien sur, un processeur n'ayant qu'un cœur ne pouvant pas exécuter deux codes simultanément, c'est l'OS qui donne l'impression de parallélisme en exécutant chacun son tour un petit peu l'un et un petit peu l'autre de façon transparente pour toi.

    Après il y a une quantité innombrables d'articles sur pthread (et la programmation de threads en général) sur internet, je ne saurai que te conseiller une bonne lecture...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 388
    Points : 502
    Points
    502
    Par défaut
    Un cours sur les threads ici.
    Un thread (Fil ou encore Fil d'exécution) est une portion de code (fonction) qui se déroule en parallèle au thread principal (aussi appelé main). Ce principe est un peu semblable à la fonction fork sur Linux par exemple sauf que nous ne faisons pas de copie du processus père, nous définissons des fonctions qui vont se lancer en même temps que le processus, ce qui permet de faire de la programmation multitâche. Le but est donc de permettre au programme de réaliser plusieurs actions au même moment (imaginez un programme qui fait un gros calcul et une barre de progression qui avance en même temps).

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 841
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 841
    Points : 1 010
    Points
    1 010
    Par défaut
    Je sais bien qu'un Thread est un bout de code qui s'exécute en parallèle mais ce que j'aimerais savoir c'est comment fonction exactement ce type de library (je ne parle pas de savoir l'utiliser).

    Dans le main, lorsqu'on exécute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        // Affiche 50 fois 1
        for(i=0 ; i<50 ; i++)
            printf("1");
    Comment est exécuté le code du thread vu qu'il n'y a pas de condition d'échappement ?
    Je suppose qu'un périphérique doit déclencher une interruption qui enclenche le code de gestion des threads mais ce ne sont que des suppositions...

  5. #5
    Membre confirmé
    Avatar de haraelendil
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2004
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 283
    Points : 533
    Points
    533
    Par défaut
    C'est le système d'exploitation qui gère ça, il a toute une liste de processus qui a à faire tourner en même temps, et régulièrement, il change d'un processus à l'autre.

    Même un code développé sans bibliothèque de thread est découpé et exécuté de la sorte, c'est juste que ça va tellement vite que tu ne le vois pas, la librairie te sert juste à créer et gérer des threads supplémentaires.

    Pour plus d'info, encore une fois, tout bon cours sur les threads doit expliquer ça plus ou moins en détaille, sinon cherche système multi-tache ou encore scheduler sous google pour trouver d'autres infos...

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 841
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 841
    Points : 1 010
    Points
    1 010
    Par défaut
    Je n'arrive pas a trouver de tuto sur ça : si quelqu'un connait un bon lien je suis preneur :'( ...

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Hello, voici une bonne doc, en anglais par contre:

    https://computing.llnl.gov/tutorials/pthreads/

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 841
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 841
    Points : 1 010
    Points
    1 010
    Par défaut
    ok merci je vais regarder ça

Discussions similaires

  1. [Thread] Comment faire fonctionner QThread?
    Par Elv13 dans le forum Multithreading
    Réponses: 1
    Dernier message: 07/05/2008, 16h49
  2. Comment endormir les threads.
    Par L4BiN dans le forum Concurrence et multi-thread
    Réponses: 6
    Dernier message: 10/08/2006, 08h56
  3. fonctionnent de la méthode run dans les threads
    Par L4BiN dans le forum Concurrence et multi-thread
    Réponses: 8
    Dernier message: 25/07/2006, 12h06
  4. Comment utiliser les Threads en VC++?
    Par mambo dans le forum MFC
    Réponses: 2
    Dernier message: 16/06/2006, 15h04
  5. [Threads]Comment les organiser pour un jeu du serpent ?
    Par Pill_S dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 11/05/2004, 16h22

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