Avatar billede martinbk Nybegynder
26. april 2007 - 06:57 Der er 2 kommentarer og
1 løsning

samtidigheds problemer på Hashtable

Hejsa

Jeg har en del bøvl med samtidighed når flere tråde skal tilgå den samme hashtable, jeg er 120% sikker på at objecterne i min hashtable er forskellige men en gang imellem sker det jeg får det samme object i 2 forskellige tråde hvilket jo ikke var meningen, håber nogen kan se min tanketorsk.

/Martin

Hashtable tmp = Hashtable.Synchronized((Hashtable) mirrorContains[searchstring]);
foreach (DictionaryEntry entry in tmp)
{
    new Thread(delegate() { commit(entry, searchstring); }).Start();
}
private void commit(DictionaryEntry entry, string searchstring)
{
    MirrorInfo minfo = (MirrorInfo) entry.Key;
    System.Console.WriteLine(minfo.Name);
}
Avatar billede inur Nybegynder
30. april 2007 - 11:07 #1
Når du laver en synkroniseret hashtabel, sørger du blodt for, at hver methode ikke bliver eksikverede samtidig.

I din kode har du en tråd for hver entry i din hashtabel, og jeg er sikker på at du ikke får flere tråde en der er entries i din table. Er det rigtigt ?

Dog overfører du parameteret "entry" i din anonyme delegate, som er et object. Adgangen til dette objekt er ikke synkrokoseret, så hvis tråden ikke starter efter at "foreach" løkken er kommet til næste punkt, vil du få vist det næste objekt i rækken. (husker jeg min teori rigtigt)

Prøv og lav nogle "Assert" for at finde ud af om mine påstande er rigtige.
Avatar billede martinbk Nybegynder
01. maj 2007 - 15:37 #2
du har så ganske ret i at der kun oprettes lige så mange tråde som der er key,value par i min hashtable, og kan entlig også godt følge din logik i at selve object tilgangen ikke er synkroniseret, spørgsmålet er så bare hvordan løses det, mit umiddelbare gæt ville være at lave en lock(tmp.SyncRoot) lige inden min foreach løkke men er langt fra sikker
Avatar billede martinbk Nybegynder
04. januar 2008 - 01:10 #3
fandt desværre aldrig en løsning på dette problem
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester