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 :

Singleton Multi Thread


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de g_tarik0010
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 186
    Par défaut Singleton Multi Thread
    Bonjour,

    Pour un besoin, j'aimerais implémenter un Singleton, j'ai le code suivant mais ca declanche une exception dès que l'objet est null
    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
     
    public class Controller
        {
            private static Controller INSTANCE;
     
            private Controller()
            {
     
            }
     
            public static Controller GetInstance()
            {
                //Acces exlusif
                Monitor.Enter(INSTANCE);
     
                if (INSTANCE == null)
                    INSTANCE = new Controller();
                Monitor.Exit(INSTANCE);
            }
        }
    est ce que vous avez des suugestions pour l'acces exclusif sur mon objet

    Merci pour vos réponses

  2. #2
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut
    C'est normal que ca plante ! tu utilise un object null pour te synchroniser desssus !

    utilise Lock & Unlock (ca utilise un moniteur).

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Par défaut
    C'est clair que si tu lock sur INSTANCE, ça ne va pas aller...

    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
     
    public sealed class Singleton
    {
       private static volatile Singleton _instance;
       private static object _syncRoot = new Object();
     
       private Singleton() {}
     
       public static Singleton Instance
       {
          get 
          {
             if (_instance == null) 
             {
                lock (_syncRoot) 
                {
                   if (_instance == null) 
                      _instance = new Singleton();
                }
             }
     
             return _instance;
          }
       }
    }

  4. #4
    Membre expérimenté Avatar de g_tarik0010
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 186
    Par défaut
    Merci pour vos réponses, je pense que la réponse de ZaaN est la mieux adaptée à mon besoin mais que la suggestion de Keihilin reste une alternative de plus, mais ce que j'ai pas aimé c'est le fait de passer par un objet pour le lock, ce que
    Voila mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public static CypherController Instance
            {
                get
                {
                        lock (typeof(CypherController))
                        {
                            if (INSTANCE == null)
                                INSTANCE = new CypherController();
                        }
                        return INSTANCE;
                }
            }

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Par défaut
    Citation Envoyé par g_tarik0010 Voir le message
    Merci pour vos réponses, je pense que la réponse de ZaaN est la mieux adaptée à mon besoin mais que la suggestion de Keihilin reste une alternative de plus, mais ce que j'ai pas aimé c'est le fait de passer par un objet pour le lock,
    Et bien il est fort dommage que tu n'aimes pas passer par un objet pour le lock, car c'est la meilleure chose à faire...

    Ma "suggestion" après tout, n'est QUE le design pattern officiel pour implémenter un singleton multi-thread...

  6. #6
    Membre Expert Avatar de Tober
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 824
    Par défaut
    Exemples de code C# pour le singleton :Singleton sur wikipedia
    C'est en gros ce qui a ete poste

  7. #7
    Invité de passage
    Inscrit en
    Juin 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1
    Par défaut multi thead
    bonjour

    j'ai vu vos interventions.

    Donc j'espère que vous pouvez m'aider.

    je suis en période de stage ingénieur.mon encadrant m'a donné une application dont je vais intégrer un module usqlite dans un média phone pour gérer l'accès concurrent.

    j'ai tester un simple client et c bon.

    maintenant il faut que j'intègre l'accès concurrent : plusieurs threads à la place d'un simple client.

    j'ai cherche sur internet mais j'ai pas compris. voici le partie de code client(main.c) si vous pouvez m'aider:

    //////////////////////////////////////////////////////////////////////////////////////////////
    /* Cclient is an application primarily designed to exercise the uSQLcClient
    library for accessing data with the TechFell protocol.

    You must have environment variable set for user, password, server and
    port of the data server.
    Launch with no parameters to get a list of the environment variables
    expected and the actual values.

    Then you may launch Cclient "select * from tst"

    The query must be double quoted

    */

    #ifdef WIN32
    #include <winsock2.h>
    #endif
    #include <stdio.h>
    #include <stdlib.h>
    #include "uSQLcClient.h"

    int reccount;

    // safelen is used for getting the length of strings passed from unknown
    // origins, limits the search.
    int safelen(char *s,int max){
    int cnt=0;
    while((s[cnt])&&(cnt<=max))cnt++;
    return cnt;
    }

    int dcallback(void *tag, int argc, char **argv, char **ColName,int fsizes[]){
    int i;

    if(reccount==0){
    for(i=0;i<argc;i++)printf("%s;",ColName[i]);
    printf("\n");
    }
    reccount++;
    for(i=0;i<argc;i++)printf("%s;",argv[i]);
    printf("\n");

    }

    void ecallback(char *err){
    fprintf(stderr,"\n%s\n",err);
    }

    int main(int argc,char *argv[])
    {
    uSQLCdb *udb;
    int ErrCode;
    char passn[64];
    char server[64];
    char user[64];
    #ifdef WIN32
    WORD vr;
    WSADATA ws;

    vr=MAKEWORD(2,0);
    if(WSAStartup(vr,&ws)){
    fprintf(stderr,"This program requires winsock 2 DLL or higher\n");
    return 1;
    }
    #endif
    //printf("\r\n %s:%d: step1 ******************* \n", __FUNCTION__, __LINE__);
    if(argc!=2){
    printf("uSQLUser is set to: %s\n",getenv("uSQLUser"));
    printf("uSQLPass is set to: %s\n",getenv("uSQLPass"));
    printf("uSQLServer is set to %s\n",getenv("uSQLServer"));
    printf("uSQLPort is set to %s\n",getenv("uSQLPort"));
    printf("\nIf these look OK, invoke with somthing like:\n\nCclient \"select * from test where foo='baa'\"\n");
    }
    else{
    // As a 0 length (null) password is valid, we must intercept the case
    // where getenv returns (null). As passwords can't have spaces
    // we check for a spc in the first char
    // printf("\r\n %s:%d: step2 ******************* \n", __FUNCTION__, __LINE__);
    sscanf(getenv("uSQLPass"),"%62s",passn);
    // printf("\r\n %s:%d: step3 ******************* \n", __FUNCTION__, __LINE__);
    if(*passn=='_')*passn=0;
    sscanf(getenv("uSQLServer"),"%62s",server);
    sscanf(getenv("uSQLUser"),"%62s",user);
    printf("server:%s,user:%s\n",server,user);
    udb=uSQLCopen(user,passn,server,3002,5000,&ErrCode);/////////il reste ici
    // printf("\r\n %s:%d: step4******************* \n", __FUNCTION__, __LINE__);//********il n'affiche pas ce msg
    if(udb){
    fprintf(stderr,"\nConnected with User Level %i\n",udb->seclevel);
    reccount=0;
    ErrCode=uSQLCexec(udb,argv[1],dcallback,NULL,ecallback);
    fprintf(stderr,"\nError %i : %i Records\n",ErrCode,reccount);
    }

    else fprintf(stderr,"\n\nCclient failed to establish connection code:%i\n\n",ErrCode);
    // printf("\r\n %s:%d: step7******************* \n", __FUNCTION__, __LINE__);
    uSQLCclose(udb);

    }


    // connect to server
    return ErrCode;
    }


    merci d'avance


    si vous voulez me contacter directement voici mon @ basmaoueslati@hotmail.fr


    merci infiniment et désolé pour le derrangement.

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

Discussions similaires

  1. [Framework] [Core] les singleton Spring sont-ils multi thread ?
    Par mrjeronimo dans le forum Spring
    Réponses: 8
    Dernier message: 24/06/2008, 12h28
  2. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  3. [Pattern]PB sur Singleton multi-thread
    Par thibaut dans le forum Général Java
    Réponses: 21
    Dernier message: 11/09/2006, 09h33
  4. [VB6][active x] faire du multi-thread avec vb
    Par pecheur dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/05/2003, 12h01
  5. [Kylix] exception qtinft.dll et multi-threading
    Par leclaudio25 dans le forum EDI
    Réponses: 3
    Dernier message: 27/03/2003, 18h09

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