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 :

Thread problème d'inter-blocage


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Points : 43
    Points
    43
    Par défaut Thread problème d'inter-blocage
    Bonsoir,
    j'ai un problème, mon programme boucle sur entre dans une cabine et se change mais je ne comprend pas pourquoi, pouvez vous m'aider?

    Ensuite quand je fais l'opération V(), quel est le thread débloqué, le premier qui a était bloqué ou le dernier?

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
     
    /*  
    Une piscine, un nombre maxCabines (P) de cabines, un nombre maxCasiers (N) de casiers et un nombre maxNageurs (M) de baigneurs !!! Pour aller dans l'eau Il faut prendre un casier, puis on se dirige vers une cabine qu'on occupe un certain temps, on va dans la piscine un autre certain temps, on réoccupe une cabine pendant un certain temps, puis on rend le casier à la fin   
    */
     
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <pthread.h>
    #include <time.h>
     
    #include <semaphore.h>
     
    #define MAXNAGEURS 10
    #define MAXCABINES 5
    #define MAXCASIERS 15
     
     
    sem_t verrouCasier;
    sem_t verrouNageur;
    sem_t verrouCabine;
     
     
    void nage(int nageur){
      sem_wait(&verrouNageur);
      sleep(4);
      printf("nageur %d nage\n",nageur);
      sem_post(&verrouNageur);
    }
     
    void occupeCasier(int nageur){
      sem_wait(&verrouCasier);
      printf("nageur %d occupe un casier\n",nageur);
    }
     
    void libereCasier(int nageur){
      sem_post(&verrouCasier);
      printf("nageur %d libere un casier\n",nageur);
    }
     
     
    void seChange(int nageur){
      sem_wait(&verrouCabine);
      sleep(2);
      printf("nageur %d entre dans une cabine et se change\n",nageur);
      sem_post(&verrouCabine);
    }
     
    void seRhabille(int nageur){
      sem_wait(&verrouCabine);
      sleep(2);
      printf("nageur %d entre dans une cabine et se rhabille\n",nageur);
      sem_post(&verrouCabine);
    }
     
    void* piscine(void *data){
      int i=(int)data;
     
      seChange(i);
     
      occupeCasier(i);
     
      nage(i);
     
      seRhabille(i);
     
      libereCasier(i);
     
    }
     
    int main(void){
      pthread_attr_t t;
      int i;
      srand(time(NULL));
      sem_init(&verrouCabine,1,MAXCABINES);
      sem_init(&verrouCasier,1,MAXCASIERS);
      sem_init(&verrouNageur,1,MAXNAGEURS);
      pthread_attr_init(&t);
      pthread_attr_setdetachstate(&t,PTHREAD_CREATE_DETACHED);
      for(i=0;;i++){
        pthread_t nageur;
        pthread_create(&nageur,&t,&piscine,(void*)i);
      }
      return 0;
    }
    Merci d'avance pour votre aide.

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Ici :
    Citation Envoyé par Delnir Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      for(i=0;;i++){
        pthread_t nageur;
        pthread_create(&nageur,&t,&piscine,(void*)i);
      }
    Tu crées un nombre infini de threads sans une petite tempo d'attente. C'est peut être cela ton problème.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

Discussions similaires

  1. [Thread] probléme de blocage.
    Par airod dans le forum Tkinter
    Réponses: 6
    Dernier message: 07/11/2006, 14h21
  2. [VB.Net][Threading] Problème de parent ...
    Par maitrebn dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/01/2006, 11h05
  3. Thread problème pour l'arreter
    Par rvzip64 dans le forum Langage
    Réponses: 8
    Dernier message: 12/07/2005, 10h51
  4. [Thread]Problème de processus
    Par berg dans le forum Concurrence et multi-thread
    Réponses: 5
    Dernier message: 18/06/2005, 20h40
  5. Thread--> problème avec ThreadProc
    Par stof dans le forum MFC
    Réponses: 33
    Dernier message: 08/06/2005, 13h47

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