1 / 13

Tråde og synkronisering

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

flavio
Download Presentation

Tråde og synkronisering

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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);

More Related