Avatar billede jtjansen Nybegynder
27. august 2008 - 19:07 Der er 12 kommentarer og
1 løsning

Volaitle int[]

Hvordan sørger jeg for at elementerne i et int[] er volatile? Jeg øsnker at dele et array på tværs at tråde uden at låse.
Avatar billede arne_v Ekspert
27. august 2008 - 19:27 #1
En struct med et int field som er volatile ?
Avatar billede arne_v Ekspert
27. august 2008 - 19:29 #2
Det er ioevrigt ikke noedvendigvis givet at volatile vil vaere hurtigere end
andre loesninger.
Avatar billede kodehoved Nybegynder
28. august 2008 - 10:26 #3
volatile løser ikke nødvendigvis dit problem. Det er et keyword, der sikrer en såkaldt memory barrier. Har du brug for at flere tråde skal opdatere indholdet af din array, er volatile ikke nok i sig selv.
Avatar billede jtjansen Nybegynder
28. august 2008 - 19:04 #4
Jeg er ikke med kodehoved. Jeg ønsker at alle tråde med det samme ser hvad andre tråde har ændret i dette array. Jeg ønsker ikke at låse.
Avatar billede kodehoved Nybegynder
29. august 2008 - 07:55 #5
Min pointe er, at volatile ikke sikrer udelt adgang, så hvis du vil have at flere tråde læser og skriver til indholdet af din array, er dette ikke sikkert, hvis du kun anvender volatile. Til ints kan du bruge Interlocked til at sikre udelt opdatering, men ellers er du nødt til at bruge en eller anden form for synkronisering.
Avatar billede jtjansen Nybegynder
29. august 2008 - 20:00 #6
Det er jeg klar over. Nu har jo ikke forklaret hvad jeg skal bruge arrayet til. I mit tilfælde skal flere tråde bare ind og melde en status ind i arrayet, og flere tråde må godt overskrive hindandes satus. Vigtigt er det at hver tråd kan læse andres satus med det samme.
Avatar billede kalp Novice
29. august 2008 - 21:26 #7
Hvis det er ligegyldigt om de overskriver hinanden status osv.
så behøver du vel blot og lave et normalt array;)
Avatar billede arne_v Ekspert
29. august 2008 - 21:38 #8
Ikke hvis ændringerne skal være visible i de andre tråde med det samme.
Avatar billede jtjansen Nybegynder
30. august 2008 - 12:02 #9
Nu læste jeg lige MS forklaring igennem igen
http://msdn.microsoft.com/en-us/library/aa645755(VS.71).aspx

I deres eksempel lader de et flag (finished) være volatile, hvilket sikrer at en almindelige statisk variabel er synlig i andre tråde med det samme.

Betyder det at jeg blot kan lave en dummy volatile variable, og dermed sikre at alle data kan ses med det samme af andre tråde?
Avatar billede arne_v Ekspert
31. august 2008 - 17:55 #10
Nu har jeg læst lidt om .NET memory model. Hvis du tilgår en volatil variabel
i den læsende tråd inden du læser fra dit array så burde du faktisk være OK, da
stores i de skrivende tråde ikke kan flytte senere end den tilgang og læsningerne
i den læsende tråd ikke kan flyttes tidligere end den tilgang.

Som hoved regel vil jeg anbefale at undgå kode, hvor man er nødt til at studere
memory model for at vide om det virker eller ej.
Avatar billede arne_v Ekspert
30. oktober 2008 - 02:28 #11
jtjansen ?
Avatar billede jtjansen Nybegynder
30. oktober 2008 - 22:05 #12
ja jeg er her. Vi er  enig om at det godt kunne lade sig gøre, eller hvad? Læg et svar hvis i ønsker point.
Avatar billede arne_v Ekspert
31. oktober 2008 - 02:22 #13
svar
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