Avatar billede mutantboy Nybegynder
18. november 2003 - 10:33 Der er 17 kommentarer og
1 løsning

låse i c sharp

Hej jeg har en metode der skal låses.

I java bruger man noget i retningen af:

public serializable void opret...

Hvordan gør jeg det i c#?

[Serializable]
public void opret...

Eller?
Avatar billede arne_v Ekspert
18. november 2003 - 10:39 #1
En måde er:

public void opret()
{
    lock(this)
    {
...
    }
}
Avatar billede finger Nybegynder
18. november 2003 - 10:39 #2
du kan inde i din metode låse et område nemt:

//class definition
private static object padlock = new object();

public void testLock()
{
  lock(padlock)
  {
      //her er låst
  }//her låser den selv op
  ///her er ikke låst
}
Avatar billede finger Nybegynder
18. november 2003 - 10:43 #3
arne_v--> har du prøvet det med at lock(this).... kan det ikke gice nogle sjove bivirkninger hvis det nu fx er i en singletonklasse? låser det så ikke for alt andet udførse i klassen, fremfor kun i en metode?
men det kan jo  selvfølgelig også være praktisk i andre sammenhænge end mit foreslag :-)
Avatar billede nielsbrinch Nybegynder
18. november 2003 - 10:51 #4
Som jeg har forstået det:

- lock(this) betyder hele klassen ikke kan tilgås af andre mens metoden kaldes.
- lock(object) betyder at alle metoder der låser på netop det object, ikke kan tilgås af andre mens metoden kaldes.
Avatar billede finger Nybegynder
18. november 2003 - 10:53 #5
ja det må det være.
Avatar billede arne_v Ekspert
18. november 2003 - 10:55 #6
lock(this) betyder at alle alle andre metoder i klassen der låser
på this blokker. Man kan sagtens kalde metodet i klassen som
ikke låser på this.
Avatar billede arne_v Ekspert
18. november 2003 - 10:57 #7
Spørgsmålet lød på det ekvivalente til Java:

public synchronized void opret()

[jeg formoder ihvertfald at den serializable skule være en synchronized]

og den låse på this.
Avatar billede nielsbrinch Nybegynder
18. november 2003 - 10:57 #8
Det er egentligt en ret smart styring i forhold til Java.
Avatar billede nielsbrinch Nybegynder
18. november 2003 - 10:57 #9
...selvom man naturligvis kan programmere sig til det samme i Java, skal jeg lige hurtigt indskyde inden arne_v siger det :-)
Avatar billede arne_v Ekspert
18. november 2003 - 11:02 #10
niels>

Siger du at lock opfører sig anderledes på this end på andre objekter ?
Avatar billede arne_v Ekspert
18. november 2003 - 11:02 #11
Avatar billede finger Nybegynder
18. november 2003 - 11:09 #12
ah.
Man kan ikke bruge "this" i static metoder hvis der skal låses.
Til dette skal man gøre som jeg skrev.
I alle andre tilfælde kan man gøre som Arne skrev.
Lovk sætter nærmest en boolean på et object der siger om der er låst eller ej, men låser egentlig ikke hele klassen.
Sådan forstår jeg det ihvertfald...
Avatar billede arne_v Ekspert
18. november 2003 - 11:10 #13
Nej - selvfølgelig kan man ikke bruge this i en static metode. Ikke til
lock - og ikke til noget andet.
Avatar billede nielsbrinch Nybegynder
18. november 2003 - 11:10 #14
Nej for søren, jeg er enig med dig. Det andet gav også mening, men det er jo lige meget når det ikke passer :-)
Avatar billede mutantboy Nybegynder
18. november 2003 - 12:13 #15
Ja selvfølgelig mener jeg synchronized i java.

Vil det sige at området som "lock" indkapsler er atomar?
Avatar billede arne_v Ekspert
18. november 2003 - 12:28 #16
Ja - det er det samme som synchronized i Java eller Enter/LeavecriticalSection
i Win32 API.
Avatar billede roger Nybegynder
18. november 2003 - 13:38 #17
Ved static metoder bruger typeof.

lock(typeof(ClassName)){
..
}
Avatar billede mutantboy Nybegynder
18. november 2003 - 14:39 #18
Du får pointene Arne... og tak :D
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