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.