Ta kontakt
 Varighet 28 timer

Kursplan

Ufordel ved synkronisering

  • Begrensninger i plattformers maskinvare - tråder på maskinvarenivå, pipelines, cache-sammenheng
  • Fundamentale begreper knyttet til multitrådet programmering (korrekthet av multitrådete programmer, livlighet, haminge, deadlock, overføring, atomaritet, sammenhengsmodeller, Flynns klassifisering)
  • Tilgjengelige mekanismer i C++ for å implementere multitråding og multiprosessering
  • Implementering av standardbiblioteket - elementer fra C++14 til dagens dato (C++2a)
  • Implementering tilgjengelig i Boost - forskjeller i forhold til standardbiblioteket

Prossesser og tråder

  • Forskjell mellom multiprosesserte og multitrådete applikasjoner
  • Operativsystemer og tråder (en kort gjennomgang av tilgjengelige implementeringer)
  • Synkroniseringsmekanismer for prosesser og tråder
  • Strukturell implementering av synkronisering
  • Spesifikt ved objektorientert tilnærming til multitråding (rollen av RAII-mønsteret)

Hukommelsesmodell i C++

  • Objekter og plasser i hukommelsen
  • Kvitting av operasjoner og påtvingelse av dem
  • Relasjoner: synkronisering, forutsetninger, ordning av operasjoner for atomiske handlinger, sekvenser med frigivelse
  • Hukommelsesbarrierer
  • Atomiske operasjoner

Trådforvaltning i C++14 og nyere

  • Klassen std::thread og oppstart av tråder
  • Identifisering av tråder
  • Vedlegg og avkobling av tråder
  • Tråder og standardcontainer
  • Feilhåndtering i C++14-tråder

Mutual eksklusjon og kritiske seksjoner

  • Enkle regler for mutual eksklusjon
  • Konsepter (typer) tilgjengelige blokkeringselementer
  • Hurtig innføring i tidsbehandling i C++14 (chrono-biblioteket)
  • Klassene std::mutex, std::timed_mutex, std::shared_mutex og deres deriverte
  • RAII-mønster i blokkeringsbehandlingen (std::lock_guard, std::unique_lock)
  • Blokkeringer som er avhengige eller utsatt (std::lock)
  • Eierskap og felles eierskap til blokkeringer og tråder
  • Leser-skriver-problemet
  • Enkelt initialisering
  • Lokal (privat) trådhukommelse (engelsk: std::thread_local)

Blokkeringer og trådsynkronisering

  • Operasjoner på semaforer
  • Rekursive blokkeringer
  • Blokkeringer med definert blokkernivå
  • Avgjørelsesvariabler og samarbeid med blokkeringer
  • Implementering av aktive og passive barrierer (engelsk: Idle Waits, Busy Waits)
  • Gjenopptakelse av trådaktivitet
  • Kommunikasjon mellom tråder (Aktørmodellen og CSP-modellen)

Asynkrone oppgaver

  • Asynkrone hendelser og deres håndtering
  • Fremtidige hendelser (engelsk: future)
  • Forpliktelser (promises) (engelsk: promise)
  • Tilberedte oppgaver (engelsk: packaged_task)

Atomiske typer

  • Standard atomiske typer
  • Universell atomisk flagg (std::atomic_flag)
  • Mallklassen «std::atomic» og dens spesialiseringer
  • Værktøksfunksjoner (frie) for std::atomic-typer

Karakteristikk ved API-design for multitråding

  • Design av strukturer med blokkering - grovt og fint granulerte blokkeringer
  • Ytelse av synkron kode - teknikker for estimering og måling
  • Dataopdeling
  • Skalering av løsninger
  • Håndtering av feil og unvanlige situasjoner i applikasjonens arkitektur

Testing og debugging av multitrådede applikasjoner

  • Kodegjennomgang med fokus på multitrådeoperasjoner
  • Egenskaper ved testing av multitrådede applikasjoner
  • Enhetstesting
  • Økning av sannsynligheten for feilaktige situasjoner i tester
  • Formelle metoder for testing av multitrådede applikasjoner
  • Mønstre i arkitektur for multitrådede applikasjoner og testing/feilsøking (gjennomgang)

Fortsatt trådforvaltning

  • Avhengige tråder (Sagi-mønster)
  • Unngå konkurransedrøft mellom dataadgang
  • Kontrollert stopp og avbryting av tråder
  • Avbrudd av blokkerende anrop
  • Håndtering av avbrytelse
  • Oppdragetyveri (task stealing)
  • Avbryting av oppgaver under programavslutning

Designmønstre for multitråding

  • Typer og formål med multitrådmønstre
  • Anvendelsesområder for mønstre
  • Trådpark (Thread Pool)
  • Aktivt objekt-mønster (Active Object)
  • Sikker trådødelig kø (Thread Safe Queue)
  • Produsent-konsument-mønster (Producer Consumer)
  • Monitor-mønster (Monitor)
  • Sikkerhet for GoF-designmønstre i multitråding

Krav

  • Kunnskap om å bruke verktøy for programvareutvikling i C++ i GNU/Linux- og/eller MS Windows-miljøer
  • Kunnskap om programmering i C++ (prosedyralt og objektorientert paradigme) på et avansert eller mellomnivå
  • Kunnskap om generisk kodeutvikling (maler)

Antall deltakere


Pris per deltaker

Referanser (1)

Kommende kurs

Relaterte kategorier