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

Mono .NET Discussion :

[C#] Mono thread


Sujet :

Mono .NET

  1. #1
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut [C#] Mono thread
    Bonjour,

    je ne sais pas trop où chercher et j'avoues que j'aborde un sujet que je ne maitrise pas particulièrement (voir pas beaucoup)

    Dans le cadre de mon application, des utilisateurs vont créer des dossiers ayant des Id différents (composé d'un numéro d'année et d'un identifiant contenu dans une table NumeroDossier)

    Seulement lorsque je vais chercher cet identifiant et l'incrémenter il ne faut pas qu'un autre thread aille lire la table en question.

    Pour être plus explicite:
    Ma table NumeroDossier contient 12.

    Un utilisateur va créer un nouveau dossier. Mon processus va donc lire la table numéro dossier et l'incrémenter à 13.

    Ainsi mes numéro de dossier sont toujours unique.
    Seulement si deux utilisateurs crééent des dossiers en même temps et que les deux lectures de la table NumeroDossier se font en même temps je me retrouve avec un problème d'intégrité de clé.

    On m'a orienté sur la piste du monothread (possible en java)
    Je voulais savoir si cela était possible en .Net et si vous aviez des articles à me conseiller sur ce sujet.

    Cordialement
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.

  2. #2
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    Je sais pas comment j'avais fait pour le louper (plus les yeux en face des trous moi) mais hop:
    http://emerica.developpez.com/csharp/threads/#LC

    Le lock(this) semble convenir.
    Y-a-t-il des subtilités auxquelles je dois faire attention?
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.

  3. #3
    Membre régulier Avatar de luggerhouse
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2006
    Messages : 62
    Points : 73
    Points
    73
    Par défaut
    Personnellement je ne suis pas tout a fait convaincu...

    L'instruction lock(this) semble plutôt s'assurer que les lignes de codes qui suivent soient bien exécutées par l'application peu importe les autres tâche que doit assurer la machine local. Par contre, il n'est pas spécifié quelle sera la priorité au niveau des utilisateurs multiples.

    Personnellement je regarderais plutôt du côté de ta base de donnée pour "locker" le champs que tu lis pendant la lecture. Ainis, si 2 utilisateurs arrivent en même temps, le second devra faire une pause jusqu'à ce que la lecture du premier soit terminée.

    Bonne chance!

    LuggerHouse
    ----- Linux Rocks! -----

    LuggerHouse
    Montreal Quebec Canada

  4. #4
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    Oui mais il est tout de même dit
    Lorsqu'une tâche voudra débiter le compte, elle appellera la méthode DebiterCompte en lui passant un montant, et si aucune autre tâche n'est actuellement en train d'exécuter la partie protégée, elle pourra entrer dans la zone de code critique. Sinon, la tâche sera placée dans une file d'attente.
    Ca veut bien dire qu'un seul thread peut accéder à cette partiue du code à un moment donné?
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.

  5. #5
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    ben moi j'utiliserais les deux !! les transactions SQL et les lock de thread

  6. #6
    Membre régulier Avatar de luggerhouse
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2006
    Messages : 62
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par jbrasselet
    Oui mais il est tout de même dit


    Ca veut bien dire qu'un seul thread peut accéder à cette partiue du code à un moment donné?
    Effectivement, mais sur chaque stations puisque l'application est local et non centrale (server side). Ainsi il est toujours possible que 2 stations arrivent à la fonction en même temps et que tu ai un problème de clé corrompue...
    ----- Linux Rocks! -----

    LuggerHouse
    Montreal Quebec Canada

  7. #7
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    Donc le lock, si j'ai bien compris, ne fonctionne pas si j'ai deux utilisateurs qui accèdent en même temps à cette partie de mon code?
    Ca sert à rien alors

    J'ai jeté un oeil sur un lock coté SQL mais je n'ai pas vu d'option me permettant de faire un lock d'une table en lecture? (personne ne peut lire la table si elle est déjà prise)
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Points : 1 046
    Points
    1 046
    Par défaut
    Salut,

    Le lock n'empeche pas deux utilisateurs d'acceder en même temps au même code mais deux threads (d'un même process bien sûr) ce qui n'est pas pareil.

    Donc, si ton appli est une appli client lourd (winform) chaque utilisateur a sa propre appli, un processus par client, le lock ne te sert pas à grand chose et il faut passer par un autre mécanisme, avec sqlserver par exemple.

    Si ton appli est une appli asp.net alors il n'y a qu'un processus pour tous tes clients, et le lock fonctionne comme tu le souhaites puisqu'il empechera deux threads d'exécuter en même temps ton code.

  9. #9
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    C'est bien une appli ASP.Net donc cela fonctionne comme je le désire.
    Merci des précisions sur les définitions des utilisateurs et threads.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.

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

Discussions similaires

  1. mono, gtk progressbar, timers, Threading
    Par vohufr dans le forum Mono
    Réponses: 2
    Dernier message: 28/02/2012, 19h23
  2. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  3. [Stratégie] Gestion d'un timeout en environnement mono-thread
    Par loicdvi dans le forum Général Java
    Réponses: 2
    Dernier message: 14/05/2007, 09h07
  4. Problème de servlet mono-thread !
    Par solven dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 13/10/2006, 10h44
  5. [Kylix] Pb de Thread !!
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 25/04/2002, 13h53

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