PDA

Visualizza la versione completa : Accesso concorrente ad hashtable


Ed_Bunker
05-03-2010, 09:07
"Piccolo" problemuccio... ho dei thread che accedono in maniera concorrente ad una tabella hash.
Ora... per quanto riguarda l'accesso condiviso non ho particolari problemi perche' sono "sicuro" che i thread vanno ad accedere ad entry differenti.
Siccome, pero', periodicamente ho bisogno di "ripulire" la tabella mediante un thread apposito che agisca, diciamo, da garbage collector... vorrei sapere se e' preferibile lockare l'intera hashtable oppure mandare in wait tutti gli altri thread (Tramite sigwait) prima di procedere all'analisi/pulizia dei dati presenti in tabella.

Potrebbe essere plausibile, invece, adottare una politica tale da permettere di lockare la tabella non interamente bensi' "a blocchi" in modo da permettere almeno ad alcuni thread l'accesso concorrente alla tabella stessa ?

P.S.: spero di essermi "spiegato" in maniera quanto meno decente...

oregon
05-03-2010, 10:12
Dipende dal tipo di lavoro che devi fare ... potrebbe anche bastare un "lock di riga", in modo da bloccare solamente la riga in cui lavori ...

Ed_Bunker
05-03-2010, 12:27
E' proprio quello a cui pensavo visto che tra l'altro su ogni "riga" lavora sempre e soltanto uno stesso thread e pertanto tutti gli altri thread sarebbero ancora liberi di effettuare il proprio lavoro senza rischi di "corse" critiche.

Il "problema" e' che l'implementazione di hashtable che sto utilizzando mette a disp. un iteratore che permette di "scorrere" tutti gli elementi presenti in tabella.

Non saprei bene, quindi, almeno per il momento, come poter "lockare" una singola riga, ovvero tutti quegli elementi che hanno la stessa hash.

O quanto meno non saprei come farlo senza violare un minimo di "information hiding"...

Ed_Bunker
06-03-2010, 12:15
NEssun suggerimento a tal proposito... considerando che l'implementazione di hashtable utilizzata e' QUESTA (http://www.cl.cam.ac.uk/~cwc22/hashtable/) ?

xnavigator
06-03-2010, 17:30
scusami ma visto che devi gestire questi problemi perchè a questo punto non usi un semplice dbms e ti risolvi tutti i problemi con 0 preoccupazioni?

Ed_Bunker
08-03-2010, 09:59
Originariamente inviato da xnavigator
scusami ma visto che devi gestire questi problemi perchè a questo punto non usi un semplice dbms e ti risolvi tutti i problemi con 0 preoccupazioni?
Perche' un dbms, per il tipo di applicazione in questione, non e' adatto.
Fa inoltre parte delle specifiche di progetto utilizzare una hashtable del "tipo" sopra indicato.

xnavigator
08-03-2010, 12:16
bhè se devi fare qualcosa di tipo "accademico" allora è plausibile...

ma che qualcuno per lavoro ti obblighi ad usare le hash table e soprattutto a prevedere la concorrenza no

Loading