Takk for at du sendte din henvendelse! En av våre teammedlemmer vil kontakte deg straks.
Takk for at du sendte din bestilling! En av våre teammedlemmer vil kontakte deg straks.
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)
Referanser (1)
Praktiske eksempler
Jan Kaniuka - SIEC BADAWCZA LUKASIEWICZ - PRZEMYSLOWY INSTYTUT AUTOMATYKI I POMIAROW PIAP
Kurs - Programowanie wielowątkowe w języku C++
Maskinoversatt