18. januar 2008 - 15:58Der er
7 kommentarer og 1 løsning
Hashtable og thread-safety
Hejsa
jeg har et mindre problem som giver mig en del hovedpine, jeg sidder og forsøger at iterere over en hashtable og for hver iteration spawne en ny tråd, en gang imellem sker det dog at jeg får samme object 2 gange, forsøgte så at synkronisere tabellen men synes ikke rigtig jeg kan få det til at køre som jeg vil
Hashtable threadTable = (Hashtable)entries[searchString]; lock(threadTable.SyncRoot) { foreach (DictionaryEntry entry in threadTable) { new Thread(delegate() { commit(entry, searchString); }).Start(); } }
så helt enkelt, hvordan synkroniserer jeg adgangen til objecterne i den hashtable, så hver tråd får sit unikke object ?
ja jeg er 110% sikker på objecterne kun er der en gang, og min commit metode indsætter intet, den læser kun, alt indsættelse er single trådet fra en database
Jeg ville nok nærmere benytte en generisk list (list<t>). En hashtable ville jeg mere bruge som en opslagsbog (ordbog osv.). Men det er selvfølgelig en smagssag. Du kunne eventuelt lade en klasse håndtere de forskellige tråde og så tilføje dem med en AddThread metode som tjekker om den pågældende tråd allerede er i din liste før du tilføjer tråden.
kan ikke rigtig se hvad forskellen skulle være på at bruge en generisk liste, udover at den ikke kan indeholde et key,value par som en hashtable kan, alternativet var måske en generic dictionary, men igen kan ikke helt se hvad forskel det skulle give i den her situation
Jeg tror muligvis at en generisk liste er lidt mere forudsigelig når du løber den igennem med en foreach. Jeg er ikke sikker, men en hashtable løber ikke nødvendigvis lineært igennem sit collectiondata. Den måde de gemmer data på er meget forskellige.
Jeg ved ikke om det er det der giver problemerne, men ville bare sikre mig at du var opmærksom på forskellene.
Rent performance mæssigt tror jeg også at det er hurtigere at fylde data i en generisk liste eller umærkbart. Jeg ved ikke om du ønsker at søge efter de forskellige tråde, men rent performance mæssigt går det meget hurtigt med at søge 50-100 ting igennem.
tror jeg vælger at lukke denne, endte entlig med at droppe projektet.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.