Il modello a sicronizzazione è più semplice da disegnare, è sufficente individuare la terna  produttore, consumatore e risorsa e renderla evidente nel disegno.
 
  La terna Produttore, consumatore e buffer  
Il produtore e il consumatore possono ad esempio venire marcati con una interfaccia (es. IProducer e IConsumer) lo stesso vale per la risorsa che concettualmente si presta bene a essere considerata un buffer (es IBuffer).
Il buffer segue comunemente il pattern del buffer circolare: http://c2.com/cgi/wiki?CircularBuffer mentre la sincronizzazione tra produttore e consumatore può avvenire secondo il disegno per pattern Observer o detto anche Publisher-Subscribers : http://wiki.ugidotnet.org/default.aspx/UGIdotNETWiki/PatternObserver.html 
Anche quando il buffer non c'è perché l'elemento di sincronizzazione è un evento, chiarisce molto avere comunque una classe che rappresenta questo evento al posto di quella che rappresenta il buffer.
  Deadlock  
Quando ci sono più terne produttore/consumatore/risorsa è utile evidenziare le istanza che hanno il ruolo di consumatore per un buffer e allo stesso tempo di produttore per un altro, tracciare il grafo e  verificare se si creano dei circuiti chiusi perché sono indice di potenziali dead-lock.
 
  Produttore e/o consumatore multipli  
E' comune che per uno stesso buffer ci siano 2 o più consumatori e può accadere che ci siano  2 e più produttori. Anche questo va evidenziato nel disegno con interfacce e naming di classe.
 
  Send e Receive bloccanti o no  
Infine nei metodi di send e recive è utile usare una naming che evivenzi quando il metodo è bloccante (es. il send resta in attesa che l'altro faccia il receive) e quando no.
 
Tags :  Progettazione Software |