TD 6 |
establish_thread_server qui fait la même chose
que la fonction establish_concurrent_server du td précédent mais
utilisant des co-processus à la place de processus. Tester votre
fonction en utilisant le serveur de mise en majuscule du td précédent.
establish_fixed_thread_number_server,
comparable à la fonction précédente, qui lance au démarrage un
nombre fixé de co-processus plutôt que de les lancer au fur et à
mesure des connexions. Pour cela, tous les co-processus acceptent de
façon concurrente les connexions. Pour assurer qu'un unique
co-processus acceptera une connexion, l'appel à accept est
protégé par un mutex.
write_protect: control -> ('a -> 'b) -> 'a -> 'b et
read_protect: control -> ('a -> 'b) -> 'a -> 'b qui permettent
d'assurer la condition précédente pendant l'exécution de la fonction
passée en argument.
type control = { mutex : Mutex.t; write_enable : Condition.t ; mutable readers : int };; let create () = { mutex = Mutex.create (); write_enable = Condition.create(); readers = 0; };; |
delay pour simuler que l'écriture ou la
lecture prennent un certain temps, afin de pouvoir observer les attentes sur
le mutex.)
type event = {start : int; finish : int; info : string } type day = (string*event) list;; type agenda = day array;; type operation = | Get_agenda (** demander les informations de tout l'agenda *) | Get_day of int (** demander les informations sur une journée *) | Add_event of string * int * int * int * string (** (nom, jour, heure début, heure fin, info) ajouter une entrée, le nom droit être unique le jour donné *) | Delete_event of string * int (** (jour, nom) supprimer les informations de la journée donnée avec le nom donné *) ;; type result = | Unit | Agenda of agenda | Day of day | Exception of exn ;; |
execute_query qui lit une opération depuis un
descripteur passé en argument, l'effectue puis écrit son résultat dans
le descripteur. Par exemple, si l'opération lu depuis le descripteur
est Get_day, cette fonction lit le jour demandé dans l'agenda puis
retourne le résultat qui sera soit de type Day si le jour
demandé existe, soit de type Exception si une exception a été levée.
remote_query qui prend une operation, se connecte au serveur
et fait exécuter l' operation par le serveur.
get_day, get_agenda, add_event et
delete_event qui effectuent les opérations correspondantes sur le
serveur distant. L'adresse du serveur et le port sont des constantes
dans le code.
This document was translated from LATEX by HEVEA and HACHA.