CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Aide sur un Problème / pseudo code C

Justinelovelp
Justinelovelp
Niveau 1
13 septembre 2007 à 18:49:08

Salut tout le monde,
Voila je vous écrit, car je rencontre quelques difficultés avec le problème / Code, suivant:

Le principe est hérité des chemins de fer.
Lorsque le sémaphore est levé, le processus P peut continué
son chemin, lorsqu´il est baissé il doit attendre jusqu´a
ce qu´un autre processus Q le lève.

Dans ce modèle il existe trois primitives:

- Lever(c) fait passer le sémaphore c de la valeur "Baissé" à "Levé"
- Baisser(c) fait passer le sémaphore c de la valeur "Levé" à "Baissé"
- Flag(c) retourne vrai si le sémaphore c est baissé.

Le principe est le transfert de résultat au moyen d´un tampon.

Le fonctionnement est le suivant:

Processus P

Baisser(e);
While (Calculs à faire){
calculs des éléments du tampon(a);
baisser(e);
if (flag(f)) {
attendre(f);
}
écrire tampon (a);
lever(e);

Processus Q

Lever(f);
While (élément à transférer) {
if (flag(e)) {
attendre(e)
}
baisser(f);
lire tampon(a);
lever(f);
}

Personnellement je traduis ce pseudo code C de la manière suivante :

Processus P

Lorsque le sémaphore est levé, P peut continué son chemin.
Lorsqu’il est baissé, il doit attendre que Q ce leve.

On baisse P
Pendant qu’il calcul les éléments du tampon (a)
Si Q est baissé on attend
Sinon
On écrit dans le tampon
Et on lève P.

Processus Q

On lève Q
Pendant qu’ils transfert les éléments
Si P est baisser
On attend

Baisser Q
Lire le tampon (a)
Lever (f)

Voila je bloque sur la traduction de ce pseudo code C depuis quelques jours, c’est pourquoi je poste sur ce forum.

J’aimerais bien aussi vous posez trois petite question svp.

Ma traduction est-elle bonne ?

E correspond au processus P, et f correspond au processus Q. C’est ça ?

En ce qui concerne la primitive suivante :
- Flag(c) retourne vrai si le sémaphore "c" est baissé.

Que veut elle vraiment dire ?

Je vous remercie d’avance pour votre aide, ça serait vraiment gentil.
Je voulais poster sur le Forum entraide scolaires, mais j´avais peur de ne pas avoir de réponse et la programmation étant le métier que j´étudie j´ai décider de poster ici.
Je m´excuse si cela ne conviens pas :s
et Je m’excuse aussi pour les éventuels fautes d’orthographe, je suis pas très forte …
A bientôt.

godrik
godrik
Niveau 30
13 septembre 2007 à 19:40:00

"Je m´excuse si cela ne conviens pas :s "
ne t´en fait pas. C´est en plein dans le scope.

Mais je ne suis pas bien sur de comprendre ton probleme.
Ton semaphore est il homogene a un semaphore systeme ?

Tes fonctions lever, baisser et flag sont elles atomiques ? (deux processus differents peuvent il y faire appel en meme temps ?) Sont il bloquant ? (si je baisse un levier baisser, que se passe t´il ?)

"E correspond au processus P, et f correspond au processus Q. C’est ça ? "
Je n´ai pas vu de processus E et F.

Justinelovelp
Justinelovelp
Niveau 1
13 septembre 2007 à 20:04:18

Merci de ta réponse Godrik.
Alors je vais essayer de répondre à tes questions.

"Ton semaphore est il homogene a un semaphore systeme ?"
J´ai rien vue de tout ça dans mon cours :s donc ... aucune idée :/

"Tes fonctions lever, baisser et flag sont elles atomiques ? (deux processus differents peuvent il y faire appel en meme temps ?) Sont il bloquant ? (si je baisse un levier baisser, que se passe t´il ?) "

Non, on parle pas encore de processus extérieur.
En faite on veux juste synchroniser deux processus ( En locurence ici P et Q de façon à ce que Q ne peut lire que si P à écrit et O ne peut écrire que si Q à terminé le transfert ).
P et Q sont l´équivalent de deux trains roulant sur deux voies distinctes qui doivent se synchroniser pour pouvoir franchir un croisement sans accident. Dou le principe deux fonctions "Levé" et "Baissé" visiblement.

"Je n´ai pas vu de processus E et F."
Non en effet, j´ai fait une petite erreur, ce sont juste deux variables qui permettent de synchoniser le tout.

En faite je comprend pas vraiment ce "Pseudo Code".
Je vois très bien le principe du chemin de fer mais voila.
Ce cour manque d´explication je trouve...

J´espère avoir répondu à tes questions, merci encore.

dnob700
dnob700
Niveau 10
13 septembre 2007 à 21:33:23

disons, que ce que tu nous a dit ne décrait pas tout le programme. Entre, autre, il faut connaître l´état des sémaphore au début du programme. Que va-t-il se passer si le processus Q, appelle flag(e) avant que le processus P est appelé baisser(e) ? ou s´ils font ces appels simultanément ?

D´autre part P baisse e au départ, puis le rebaisse à chaque tour de boucle. C´est réellement le comportement voulu ? ça ne sers à rien. peut-être qu´il y a une faute dans le pseudo code non ?

Pour le reste, ta "traduction" (qui est plus une réécriture) me semble correcte.

Justinelovelp
Justinelovelp
Niveau 1
13 septembre 2007 à 23:03:11

Bonsoir Dnob700,

"disons, que ce que tu nous a dit ne décrait pas tout le programme. Entre, autre, il faut connaître l´état des sémaphore au début du programme. Que va-t-il se passer si le processus Q, appelle flag(e) avant que le processus P est appelé baisser(e) ? ou s´ils font ces appels simultanément ?"

En faite ce n´est pas un "Pseudo" code Complet.
C´est juste pour comprendre comment fonctionne les sémaphore, le fonctionnement de synchronisation de base si on peut dire.

Après plusieurs jours d´acharnement, je viens finalement de réussir à trouver les réponses à mes questions.

Je m´excuse pour le dérangement, et surtout je vous remercie, vous êtes très sympathique :)
A bientot :D

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment