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 :

Pile et thread


Sujet :

POSIX C

  1. #1
    Membre confirmé Avatar de Tchetch
    Inscrit en
    Mars 2002
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 401
    Points : 477
    Points
    477
    Par défaut Pile et thread
    Bonjour,

    J'ai un système qui me lit des données et qui doit faire un traitement dessus. Ce que j'ai pensé faire, c'est un thread qui s'occupe des la lecture et un thread qui s'occupe du traitement. Comme le traitement peut prendre du temps (Plus que la lecture), j'ai pensé faire une pile FIFO.
    Le principe est simple, le thread de lecture ajoute les données au dessus de la pile et le thread de traitement retire les données au fond de la pile.

    Un petit schéma :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    (Lecture des données) -> [data 6]
                                  [data 5]    -
                                  [data 4]     |
                                  [data 3]      > PILE
                                  [data 2]     |
                                  [data 1]    -
                                      [data 0] -> (traitement des données)
    (les données sont des blocs d'une 50aine d'octet)

    Ainsi, les threads ne doivent pas être synchroniser et la lecture ne doit pas attendre la fin du traitement. Le traitement lui prend des données temps qu'il y en a.

    Je pensais mettre aussi un verrou sur la pile et sur les données (Un unité de données peut-être verouiller, ou bien toute la pile carrément). Le problème est que le verrou n'est qu'une simple variable (ma pile est mes unités de données sont des structures) et je ne sais pas si on peut se trouver dans la situation suivant : Les deux threads veulent verouiller la pile en même temps, que se passera-t-il ?

    Et je me demande s'il y a d'autre solutions possibles pour faire ça, la mienne n'est sûrement pas la meilleur !

    Merci.

    T.
    Mon wiki (on y parle Debian principalement) : http://www.tchetch.net/

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    Quel OS car dans ce cas de figure cela peut avoir sont importances.

    Plutot qu'une pile que tu va devoir gérer utilise les mecanisme present sur l'OS :
    UNIX: les messages queues font cela tres bien (ipcs)
    WINDOWS : les mailslot font l'equivalent

    l'interrer est que le mecanisme te permettra de ne pas gérer un quelquonque gestion de blocage ou de synchronisation mais juste la presence ou nom de message dans la file
    Marc
    Slackware for ever ......
    BASH - KSH ( http://marcg.developpez.com/ksh/ )

  3. #3
    Membre confirmé Avatar de Tchetch
    Inscrit en
    Mars 2002
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 401
    Points : 477
    Points
    477
    Par défaut
    Actuellement l'OS est Windows, mais un portage vers UNIX est envisagé, donc j'aimerais garder une indépendance maximale au niveau de l'OS, ce qui n'est pas toujours le cas. Mais moins il y a de code à modifier pour le portage, mieux c'est !
    Mon wiki (on y parle Debian principalement) : http://www.tchetch.net/

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    le probleme c'est que ces mecanisme sont differents entre les 2 OS.
    Le principe reste le meme (les messages queue sous windows sont imbuvables et non portable pas plus que les mailsslot d'ailleur).
    En isolant les fonctions de creation/lecture/ecriture des queues le code restant devrait etre portable, enfin si y a pas appelle au MFC, ni au GUI ....ni au thread d'ailleurs
    Marc
    Slackware for ever ......
    BASH - KSH ( http://marcg.developpez.com/ksh/ )

  5. #5
    Membre confirmé Avatar de Tchetch
    Inscrit en
    Mars 2002
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 401
    Points : 477
    Points
    477
    Par défaut
    Bon pour les threads j'utilise la glib et gtk pour l'interface, donc il ne devrait pas y avoir de problèmes, mais pour le principe ci-dessus, je pense que je peux prendre le temps de faire un système et à la limite je peux utiliser les mutex pour être sur de ne pas avoir de problème au niveau d'accès des données.

    Je pense que c'est une bonne solution, non ?

    T.
    Mon wiki (on y parle Debian principalement) : http://www.tchetch.net/

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    oui bien sur mais l'usage des queue sous unix ou des mailslot sous windows et asses simple, surement plus simple que les mutex si tu a + de 2 threads
    Marc
    Slackware for ever ......
    BASH - KSH ( http://marcg.developpez.com/ksh/ )

  7. #7
    Membre confirmé Avatar de Tchetch
    Inscrit en
    Mars 2002
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 401
    Points : 477
    Points
    477
    Par défaut
    Ok, je vais regarder ça.

    Merci beaucoup.

    T.
    Mon wiki (on y parle Debian principalement) : http://www.tchetch.net/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de pile lors de l'exécution de threads
    Par cueffic dans le forum Linux
    Réponses: 7
    Dernier message: 29/11/2008, 17h54
  2. Pile des threads d'un process
    Par matdur dans le forum C#
    Réponses: 4
    Dernier message: 06/10/2007, 16h38
  3. [Threads] Implémenter une pile de processus
    Par Invité dans le forum Général Java
    Réponses: 7
    Dernier message: 30/07/2007, 12h14
  4. Réponses: 14
    Dernier message: 14/12/2006, 08h34
  5. Win32 - parcourir la pile utilisateur d'un thread
    Par BlackGoddess dans le forum Windows
    Réponses: 1
    Dernier message: 06/05/2005, 12h21

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