1. #1
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    janvier 2004
    Messages
    6 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : janvier 2004
    Messages : 6 913
    Points : 11 644
    Points
    11 644

    Par défaut Initiation à la programmation multitâche en C avec Pthreads

    http://franckh.developpez.com/tutoriels/posix/pthreads/

    Les threads permettent de créer des programmes multitâches, ce tutoriel vous propose une approche par la pratique en partant d'un exemple unique !
    Vous pouvez laisser un commentaire pour cet article à la suite.


    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    juillet 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : juillet 2003
    Messages : 42
    Points : 26
    Points
    26

    Par défaut

    Dans la 2e partie (mutex), il y'a une inversion:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    /* Debut de la zone protegee. */
    pthread_mutex_lock (& store.mutex_stock);
     
    psleep (get_random (3));
    au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    psleep (get_random (3));
     
    /* Debut de la zone protegee. */
    pthread_mutex_lock (& store.mutex_stock);

  3. #3
    Membre habitué

    Femme Profil pro
    Développeur informatique
    Inscrit en
    février 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : février 2004
    Messages : 58
    Points : 177
    Points
    177

    Par défaut Lien PDF

    Bonjour,
    Merci beaucoup pour ce cours très clair.
    Juste une petite remarque : il y a une erreur dans l'adresse du PDF (il manque un '/').

  4. #4
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    juillet 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2014
    Messages : 102
    Points : 220
    Points
    220

    Par défaut

    Un excellent tutoriel, surtout pour les novices de la programmation multi-threading. Merci !

  5. #5
    Membre chevronné
    Inscrit en
    juin 2009
    Messages
    751
    Détails du profil
    Informations forums :
    Inscription : juin 2009
    Messages : 751
    Points : 2 221
    Points
    2 221

    Par défaut

    Je viens de lutter contre un problème étrange pour mon initialisation de mutex.

    En effet PTHREAD_MUTEX_INITIALIZER ne peut être utilisé uniquement sur les variables statiques (ce qui n'était pas mon cas, malheureusement). Ce détail à son importance car, d'après pthread.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    # define PTHREAD_MUTEX_INITIALIZER {{0,0,0,0,0,0,{0,0}}}
    Et donc le compilateur n'aime pas trop la première accolade et nous gratifie d'une erreur du type "Expected expression before `{'"

    La solution est tellement simple mais n’apparaît pas dans ce tuto : Il faut initialiser le mutex (non statique donc) avec
    pthread_mutex_init(&mutex, NULL);

    Je verrai donc bien un soit un petit complément d'introduction au chapitre sur les mutex, soit en première sous partie au même titre pthread_mutex_lock / unlock

    Super tuto sinon

  6. #6
    Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    mars 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : mars 2017
    Messages : 1
    Points : 4
    Points
    4

    Par défaut Problème de réveil de thread

    Bonjour,

    En reprenant ce bon exemple, j'ai trouvé un souci.

    Dans le thread store, le réveil de tous les threads joueurs doit être réalisé, donc au lieu de l'appel à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pthread_cond_signal (& store.cond_clients);
    c'est un appel à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pthread_cond_broadcast(& store.cond_clients);
    qui doit être effectué.

    Stéphane

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/01/2014, 21h19
  2. Problème Programmation avec Pthreads
    Par TSUS86 dans le forum Threads & Processus
    Réponses: 6
    Dernier message: 28/03/2010, 14h54
  3. Initiation à la programmation avec l'API Windows
    Par PIC16F877A dans le forum Débuter
    Réponses: 5
    Dernier message: 27/02/2010, 11h40

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