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 :

static pthread_mutex_t my_mutex


Sujet :

C

  1. #1
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Points : 234
    Points
    234
    Par défaut static pthread_mutex_t my_mutex
    - pourquoi doit on declarer pthread_mutex_t en static dans le code suivant (dans les premières lignes)
    - que se passe t -il si on enlève static, quels sont les risques encourus ?
    merci d'avance
    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
     
     
    #include <stdlib.h>
    #include <pthread.h>
     
    static pthread_mutex_t my_mutex;
    static int tab[5];
     
    void *read_tab_process (void * arg)
    {
      int i;
     
      pthread_mutex_lock (&my_mutex);
      for (i = 0 ; i != 5 ; i++)
        printf ("read_process, tab[%d] vaut %d\n", i, tab[i]);
      pthread_mutex_unlock (&my_mutex);
      pthread_exit (0);
    }
     
    void *write_tab_process (void * arg)
    {
      int i;
     
      pthread_mutex_lock (&my_mutex);
      for (i = 0 ; i != 5 ; i++) {
        tab[i] = 2 * i;
        printf ("write_process, tab[%d] vaut %d\n", i, tab[i]);
        sleep (1); /* Relentit le thread d'ecriture... */
      }
      pthread_mutex_unlock (&my_mutex);
      pthread_exit (0);
    }
     
    main (int ac, char **av)
    {
      pthread_t th1, th2;
      void *ret;
     
      pthread_mutex_init (&my_mutex, NULL);
     
      if (pthread_create (&th1, NULL, write_tab_process, NULL) < 0) {
        fprintf (stderr, "pthread_create error for thread 1\n");
        exit (1);
      }
     
      if (pthread_create (&th2, NULL, read_tab_process, NULL) < 0) {
        fprintf (stderr, "pthread_create error for thread 2\n");
        exit (1);
      }
     
      (void)pthread_join (th1, &ret);
      (void)pthread_join (th2, &ret);
    }

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par ikuzar Voir le message
    - pourquoi doit on declarer pthread_mutex_t en static dans le code suivant (dans les premières lignes)
    En C, le mot clef "static" devant une variable -en dehors d'une fonction- veut dire que cette variable ne sera accessible que dans le fichier courant.

    Citation Envoyé par ikuzar Voir le message
    - que se passe t -il si on enlève static, quels sont les risques encourus ?
    Dans ton exemple, il ne se passera rien.
    Enlever le mot clef "static" c'est prendre le risque qu'un autre module puisse accéder à la variable en question.

    EDIT : merci nicolas.sitbon
    Dernière modification par Invité(e) ; 01/09/2009 à 17h25.

  3. #3
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par mabu Voir le message
    En C, le mot clef "static" devant une variable veut dire que cette variable ne sera accessible que dans le fichier courant.
    Quand cette même variable est déclarée en dehors d'une fonction, il convient de le préciser, autrement, la porté est limité à la fonction contenant la variable (depuis la déclaration).
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

Discussions similaires

  1. thread et méthodes static
    Par sylpichard dans le forum MFC
    Réponses: 3
    Dernier message: 02/06/2004, 17h12
  2. Problème avec l'option -static de gcc
    Par lsdInside dans le forum Linux
    Réponses: 2
    Dernier message: 08/05/2004, 01h01
  3. [Débutant(e)] JSP utilisation static....une autre
    Par tcgenrecom dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 01/03/2004, 15h27
  4. Mais que fait static ???
    Par elsargento dans le forum C
    Réponses: 4
    Dernier message: 25/09/2003, 09h55
  5. les variables globales static
    Par gRRosminet dans le forum C
    Réponses: 8
    Dernier message: 27/04/2002, 08h34

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