Précédent   Forum du club des développeurs et IT Pro > C et C++ > C > Télécharger
Télécharger Téléchargement de codes sources et d'outils de développement C
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 15/12/2012, 13h54   #1
issam.abdallah
Membre éprouvé
 
Homme Abdallah Issam
Ingénieur Informatique
Inscription : novembre 2012
Messages : 33
Détails du profil
Informations personnelles :
Nom : Homme Abdallah Issam
Localisation : Tunisie

Informations professionnelles :
Activité : Ingénieur Informatique
Secteur : Enseignement

Informations forums :
Inscription : novembre 2012
Messages : 33
Points : 486
Points : 486
Par défaut Le problème de Producteurs/Consommateurs avec les threads et les semaphores POSIX.

Bonjour,

Je vous propose un nouvel élément à utiliser : Le problème de Producteurs/Consommateurs avec les threads et les semaphores POSIX.

Le modèle de Producteurs/Consommateurs est un exemple classique présentant le problème du synchronisation des ressources (écran, imprimantes, mémoire ...) entre plusieurs threads.

Notre programme utilisera deux threads (producteur et consommateur) et une file d'attente (FIFO) pour partager des données (nombres entiers).

Le code source est bien commenté !

Qu'en pensez-vous ?
issam.abdallah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2012, 16h32   #2
Trademark
Membre émérite
 
Avatar de Trademark
 
Inscription : février 2009
Messages : 563
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 563
Points : 805
Points : 805
Salut,

Alors plusieurs critiques :
  • Utilisation de variables globales.
  • Pas de découplage de la liste et du problème producteurs/consommateurs.
  • Utilisation de sémaphore au lieu des conditions POSIX.
  • Proposition d'un exercice scolaire classique, sans se pré-occuper de la ré-utilisabilité du module. Intérêt ? NULL.
  • Une section critique doit être la plus courte possible et vous mettez une opération d'I/O dedans…
  • Pas de libération de mémoire.

Pas la peine de déposer tous vos exercices hein

Ou alors dans la section approprié en demandant une revue de code.
Trademark est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/12/2012, 12h16   #3
issam.abdallah
Membre éprouvé
 
Homme Abdallah Issam
Ingénieur Informatique
Inscription : novembre 2012
Messages : 33
Détails du profil
Informations personnelles :
Nom : Homme Abdallah Issam
Localisation : Tunisie

Informations professionnelles :
Activité : Ingénieur Informatique
Secteur : Enseignement

Informations forums :
Inscription : novembre 2012
Messages : 33
Points : 486
Points : 486
Par défaut Le problème de Producteurs/Consommateurs avec les threads et les semaphores POSIX.

Bonjour !
Merci pour vos remarques :

Remarque 1 : Utilisation de variables globales.
Ce programme est très simple (3 fichiers). L'utilisation de variables globales est déconseillé, c'est vrai. Mais leurs utilisation va simplifer les choses dans ce code !
Comment ?
Sans l'utilisation des variables globales, on doit faire passer ces même variables (sem1, sem2, mutex et fifo ), dans une structure, au fonctions consommer(void *param) et produire(void *param). Puis dans les deux fonctions de threads, on doit faire un cast pour convertir le type de param de void au struct !!!!!!

Remarque 2 : Pas de découplage de la liste et du problème producteurs/consommateurs.

Remarque 3 : Utilisation de sémaphore au lieu des conditions POSIX.
Where is the problem ?

Remarque 4, Remarque 5 ???????????????????

Remarque 6 :
Oops un petit free(fifo.head); a été oublié
Mon dieu, Java m'a fait oublié le C !
issam.abdallah est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 22/12/2012, 23h17   #4
Trademark
Membre émérite
 
Avatar de Trademark
 
Inscription : février 2009
Messages : 563
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 563
Points : 805
Points : 805
Citation:
Bonjour !
Merci pour vos remarques :

Remarque 1 : Utilisation de variables globales.
Ce programme est très simple (3 fichiers). L'utilisation de variables globales est déconseillé, c'est vrai. Mais leurs utilisation va simplifer les choses dans ce code !
Comment ?
Sans l'utilisation des variables globales, on doit faire passer ces même variables (sem1, sem2, mutex et fifo ), dans une structure, au fonctions consommer(void *param) et produire(void *param). Puis dans les deux fonctions de threads, on doit faire un cast pour convertir le type de param de void au struct !!!!!!
Les variables globales ne sont jamais la solution même dans un petit programme. Et vous semblez savoir comment vous en passer alors passez-vous en.

Citation:
Remarque 2 : Pas de découplage de la liste et du problème producteurs/consommateurs.
Il y a quelque chose que vous n'avez pas compris ?

Citation:
Remarque 3 : Utilisation de sémaphore au lieu des conditions POSIX.
Where is the problem ?
Ce n'est pas vraiment un problème, les sémaphores sont justes un peu dépassées. Voir article Wikipédia.


Citation:
Remarque 4,
Ce que je me demande via cette remarque, c'est : quelle est l'intérêt de poster ce programme ?

Citation:
Remarque 5 ???????????????????
Vous n'êtes pas sans savoir qu'une section critique est la zone de code qui est protégé par un mutex. Vous savez donc aussi que cette zone n'est accessible à tout moment que par une tâche et que si possible elle doit être le plus courte possible ! Or, une opération d'entrée/sortie comme printf est très longue à s'exécuter a l'exécution, c'est dommage vu qu'elle pourrait être en dehors. Évidemment vous pouvez avoir des problèmes d'affichage si elle est en dehors. Dans ce cas ce que vous devrez protégé par un mutex c'est, non pas l'accès à l'écriture de la console, mais l'accès a un buffer d'écriture sur la console.
Trademark est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/12/2012, 14h10   #5
issam.abdallah
Membre éprouvé
 
Homme Abdallah Issam
Ingénieur Informatique
Inscription : novembre 2012
Messages : 33
Détails du profil
Informations personnelles :
Nom : Homme Abdallah Issam
Localisation : Tunisie

Informations professionnelles :
Activité : Ingénieur Informatique
Secteur : Enseignement

Informations forums :
Inscription : novembre 2012
Messages : 33
Points : 486
Points : 486
l'intérêt de poster ce programme ?
Un des intérêts est d'ouvrir toute cette discussion
issam.abdallah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/12/2012, 19h54   #6
Trademark
Membre émérite
 
Avatar de Trademark
 
Inscription : février 2009
Messages : 563
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 563
Points : 805
Points : 805
Alors c'est la catégorie qui n'est pas bonne. Tu dis explicitement en début de message que c'est un élément que tu nous proposes. Enfin bref, c'est pas bien grave je suppose que tu pensais qu'il y aurait moins de critique sur ton code.
Trademark est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h51.


 
 
 
 
Partenaires

Hébergement Web