Download præsentationen
Præsentation er lastning. Vent venligst
Offentliggjort afOlivia Frank Redigeret for ca. et år siden
1
Tråde og synkronisering
2
Tråde To typer tråde Dedikerede tråde -programmør opretter og tilknytter metode -”kører tråd-metoden (job) én gang” Tråd pulje (worker-threads) -Trådmetoder (job) pladseres i en kø, hvorfra trådpuljen udvælger og afvikler -Tråde i puljen stopper ikke (suspendes blot hvis ikke noget arbejde)
3
Tråde Oprettelse af dedikeret tråd: Tråd objekt med tilknyttet delegat 2 muligheder for delegat -void metode uden parameter -void metode med et objekt som parameter Delegat angives som parameter ved oprettelsen af tråd- objekt Evt. parameter (1 objekt) angives i trådens startmetode
4
Tråde Oprettelse og start af tråd uden parameter: using System.Threading; … Thread tråd = new Thread(new ThreadStart(TrådMetode)); eller blot = new Thread(TrådMetode); tråd.Start(); … void TrådMetode() { …
5
Tråde Oprettelse og start af tråd med parameter: using System.Threading; … Thread tråd = new Thread(new ParameterizedThreadStart (TrådMetode)); eller blot = new Thread(TrådMetode); tråd.Start( 10 ); … void TrådMetode(object startparameter) { int tal = (int) startparameter; …
6
Tråde Start af tråd-metode i trådpulje: Parameter kan udelades i start og vil så være null i metoden using System.Threading; … ThreadPool.QueueUserWorkItem(new WaitCallback(TrådPoolMetode),10); eller blot ThreadPool.QueueUserWorkItem(TrådPoolMetode,10); … void TrådMetode(object state) { int tal = (int) state; …
7
Tråde Væsentlige Properties og metoder Thread klassen: Sleep(..) CurrentThread Tråd objekt: Join() IsAlive Priority IsThreadPoolThread Interrupt()(afbryder wait sleep join) IsBackground(set og get)
8
Tråde Timer – speciel tråd med ekstra parametre for enkelt eller repeterende ticks (bemærk ingen start-metode). using System.Threading; … Timer timer = new Timer(new TimerCallback (TimerMetode),…….); eller blot = new Timer(TimerMetode,……); … void TimerMetode(object state) { …
9
Synkronisering Fere mulige mekanismer: Monitor lock (excetionsafe Monitor wrapper) Interlocked (tælle semaphore) ReaderWriterLock (reader/writer problem – med kaskadekald) Mutex (binær kerne-semafor – deles af processer) Semaphore (givet antal adgange til ressource)
10
Synkronisering Monitor med metoderne: Enter (lock-object)- blocking lock Exit (lock-object)- release Wait (lock-object)- release and wait Pulse (lock-object)- notify PulseAll (lock-object)- notifyall TryEnter (lock-object)- nonblocking lock
11
Synkronisering lock (lock-object) – exception safe Monitor wrapper Svarer til: Monitor.Enter(lock-object); try { …. } finally { Monitor.Exit(lock-object); }
12
Synkronisering ReaderWriterLock (spec. semafor for nem løsning af reader-writer problemet) Vigtige metoder: AcquireReaderLock (lock-object) ReleaseReaderLock (lock-object) AcquireWriterLock (lock-object) (pas på deadlock hvis allerede readerlock) ReleaseWriterLock (lock-object) UpgradeToWriterLock (lock-object) DowngradeFromWriterLock (lock-object)
13
Synkronisering Der er lavet synkroniserede wrapper klasser for flere colletionklasser. Eks. for ArrayList ArrayList list = new ArrayList(); ArrayList safelist = ArrayList.Synchronized(list);
Lignende præsentationer
© 2024 SlidePlayer.dk Inc.
All rights reserved.