GiorgioRavera.it

il mio blog: ciò che penso e faccio, trucchi di programmazione, linux, reti e molto altro

novembre 23rd, 2009

Regole di programmazione concorrente

Informatica, by Giorgio.

Ecco alcune regole utili per scrivere algoritmi concorrenti:

  1. Accesso sincronizzato a tutti gli elementi (oggetti o variabili) condivisi.
  2. Istruzioni di Test and Set atomiche: lock, valutazione di una condizione ed eventuale wait devono essere racchiusi all’interno della medesima regione critica (synchronized o mutex).
  3. Tutte le chiamate alla funzione wait dovrebbero essere condizionate per evitare starvation. Qualora non lo fossero, è necessaria la presenza di un demone, svegliato dai clienti prima di addormentarsi, che svegli i Thread.
  4. Non separare Sincronizzazione da Sincronizzato: se un oggetto necessita di essere condiviso è necessario svilupparlo per renderlo concorrente direttamente al suo interno, non attraverso l’incapsulazione in un wrapper.
  5. Usare mappe di oggetti per sincronizzare gruppi di Thread che attendono il medesimo evento oppure, per una specifica richiesta, mappe di Contenitori che si portano dietro l’evento più la lista di Thread in attesa di esso.
  6. Evitare flag, usare piuttosto blocchi esclusivi nidificati (synchronized) in modo da generare una coda implicita su quello più esterno.
  7. Barrier Sync attraverso una liste di Thread: fino a quando ha almeno un elemento, nessun altro thread può procedere allo stato successivo. L’ultimo che esce sveglia tutti gli altri.
  8. Race Condition: evitare che Thread accedano a risorse a caso addormentandoli e svegliando solo quelli che possono acquisire il lock, ordinandoli in base alle risorse richieste. Una volta svegliati, è casuale l’accesso tra loro, ma è garantito che venga ottimizzato il consumo di risorse.
  9. Date due sequenze di istruzioni atomiche A e B, la loro unione AB non è atomica.

    Back Top

    Risposte a“Regole di programmazione concorrente”

    1. Ancora nessun commento
    1. Ancora nessun trackback

    Lascia un Commento

    L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

    *

    :-[ (B) (^) (P) (@) (O) (D) :-S ;-( (C) (&) :-$ (E) (~) (K) (I) (L) (8) :-O (T) (G) (F) :-( (H) :-) (*) :-D (N) (Y) :-P (U) (W) ;-)