130 likes | 234 Views
Tråde og synkronisering. 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
E N D
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)
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
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() { …
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; …
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; …
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)
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) { …
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)
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
Synkronisering lock (lock-object) – exception safe Monitor wrapper Svarer til: Monitor.Enter(lock-object); try { …. } finally { Monitor.Exit(lock-object); }
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)
Synkronisering Der er lavet synkroniserede wrapper klasser for flere colletionklasser. Eks. for ArrayList ArrayList list = new ArrayList(); ArrayList safelist = ArrayList.Synchronized(list);