Précédent Index Suivant

Exercices

Les philosophes débloqués

Pour résoudre l'éventuelle blocage des philosophes orientaux, il suffit de limiter à quatre l'accès simultané à la table. Implantez cette solution.

Producteurs et consommateurs d'objet

Cet exercice reprend l'algorithme des producteurs-consommateurs avec la variante suivante : le magasin de stockage est de taille finie (ie un tableau plutôt qu'une liste gérée en fifo). De plus, nous proposons d'en faire une implantation utilisant, à l'instar du bureau de poste, les objets pour modéliser les ressources.
  1. Définir une classe produit de signature :
    class produit : string ->
    object
    val nom : string
    method nom : string
    end

  2. Définir une classe magasin telle que :
    class magasin : int ->
    object
    val mutable buffer : produit array
    val c : Condition.t
    val mutable ic : int
    val mutable ip : int
    val m : Mutex.t
    val mutable np : int
    val taille : int
    method deposer : produit -> unit
    method prendre : unit -> produit
    end
    Les indices ic et ip sont manipulés respectivement par les producteurs et les consommateurs. L'indice ic donne l'indice du dernier produit pris et ip celui du dernier produit stocké. Le compteur np donne le nombre de produits en stock. L'exclusion mutuelle et la mise en attente des producteurs et des consommateurs sera gérée par les méthodes de cette classe.

  3. Définir une fonction consommateur : magasin -> string -> unit.

  4. Définir une fonction creer_produit de type string -> produit. Le nom d'un produit sera composé de la chaîne passée en argument concaténée à un numéro de produit incrémenté à chaque appel de la fonction.

    Utilisez cette fonction pour définir producteur : magasin -> string -> unit.

  5. Écrire un programme principal de test qui crée un magasin, deux processus producteurs et quatre processus consommateurs.

Précédent Index Suivant