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 :

fonction synchrone asynchrone


Sujet :

C

  1. #1
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 41
    Par défaut fonction synchrone asynchrone
    bonjour;
    pouvez vous expliquer ce que veut dire fonction synchrone et asynchrone?
    merci

  2. #2
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Pour moi, une fonction synchrone est l'équivalent d'une fonction bloquante, c'est à dire que le programme ne continue pas tant que la fonction n'a pas terminé son travail. Lorsque qu'on appelle une fonction asynchrone, le programme continue sont alors que la fonction s'exécute en parallèle.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  3. #3
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 41
    Par défaut
    concretement quels sont les moyens en C pour rendre une fonction asynchrone synchrone?

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    En C standard, aucun moyen.

    En C POSIX, il faut utiliser l'API pthread pour lancer la fonction dans un autre thread...

    En C Win32, pareil, y'a que l'API qui change (et encore, pas si tu télécharges l'implémentation Windows de pthread...)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Une fonction peut par exemple lancer un nouveau thread (en utilisant par exemple la bibliothèque Pthread).

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 57
    Par défaut
    Tu peux changer le comportement de certaines fonctions travaillants sur des devices, FD, etc ... à l'air de la fonction ioctl().

  7. #7
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Attention, il y a une difference entre synchrone / asynchrone et bloquant/non-bloquant. On peut avoir une fonction synchrone non-bloquante, par exemple. Voir cette page, section definitions et I/O model pour une bonne distinction.

  8. #8
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par DaZumba Voir le message
    Attention, il y a une difference entre synchrone / asynchrone et bloquant/non-bloquant. On peut avoir une fonction synchrone non-bloquante, par exemple. Voir cette page, section definitions et I/O model pour une bonne distinction.
    Au temps pour moi et merci pour le lien! La distinction bloquante/non-bloquante et synchrone/asynchrone est encore floue pour moi. Je vais essayer d'investiguer le sujet en partant de ton lien.

    EDIT: Ca semble plus clair après lecture. J'ai encore un peu de mal à saisir à quoi correspond un appel à une fonction bloquante/asynchrone.

    Salutations

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    C'esr pourtant simple c'est dans le nom...

    Synchrone/Asynchrone : quelque chose qui se passe (ne se passe pas) au moment où on le demande.

    Bloquant/Non bloquant : quelque chose qui ne se termine pas (se termine) tant que l'action n'est pas complètement terminée.

    Exemple : une fonction en général est bloquante ET synchrone.

    un fprintf(stderr, ...) est bloquant et synchrone (enfin, à la gestion du device près)

    un fprintf(stdout...) est bloquant et NON synchrone (tampon dans la bibliothèque)

    (ou par exemple fwrite est bloquant et asynchrone (les instructions de la fonction doivent être toutes exécutées avant que la fonction ne retourne, mais l'écriture physique sur le device est déléguée au hardware, et donc asynchrone), alors que fread est bloquant et synchrone, puisqu'on a besoin du résultat au retour de la fonction).

    Bon, là pour moi c'est le matin, alors pas encore très bien réveillé, je ne trouve plus comme ça de non-bloquant.. Bah enfin si. Par exemple un appel à system(). Si dans la chaîne on met ce qu'on veut faire en background (du style sous unixoide "programme &"), system retournera tout de suite (synchrone) mais l'action ne sera pas forcément faite (non-bloquante) (puisque qu'on soumet le programme dans la queue des processus à loader).

  10. #10
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    Bah enfin si. Par exemple un appel à system(). Si dans la chaîne on met ce qu'on veut faire en background (du style sous unixoide "programme &"), system retournera tout de suite (synchrone) mais l'action ne sera pas forcément faite (non-bloquante) (puisque qu'on soumet le programme dans la queue des processus à loader).
    Si j'ai bien compris, ce ne serais pas plutôt: "system retournera tout de suite (non-bloquante) mais l'action ne sera pas forcément faite (asynchrone) (puisqu'on soumet le programme dans la queue des processus à loader)"?

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  11. #11
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    t'as raison comme je dis suis pas complètement réveillé...

  12. #12
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    bonjour,

    je suis d accord avec toi Thierry.
    Si le process est lancé par la fonction system pour moi il est asynchrone, son exécution ne dépends plus du process appelant => asynchrone
    [grillé comme on dit dans le milieu]

    et pour compléter la définition je dirais que :
    asynchrone + non-bloquant = Temps Réel

  13. #13
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    Pour moi, la fonction system() reste bloquante, car elle ne retourne pas tant que le nouveau processus n'est pas lancé (donc, tant que le shell n'a pas fini d'exécuter la commande "monProgramme &").
    Par contre, la commande passée à system() est asynchrone.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/06/2012, 10h39
  2. Questions sur les sockets (fonctions synchrones)
    Par azerty25 dans le forum Général Dotnet
    Réponses: 7
    Dernier message: 29/06/2007, 00h57
  3. [CTLIB] fonction callback asynchrone ?
    Par tomasha dans le forum Sybase
    Réponses: 8
    Dernier message: 07/03/2007, 10h21
  4. fonction Synchronize
    Par bandit boy dans le forum C++Builder
    Réponses: 5
    Dernier message: 22/06/2006, 10h23
  5. Replication synchrone/asynchrone avec Oracle 8i
    Par Fraise des Bois dans le forum Oracle
    Réponses: 1
    Dernier message: 11/01/2006, 21h24

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