Framtiden och trådning

En av trenderna just nu i programmering är hur skall vi använda oss av alla dessa kärnor som vi har fått för att inte tala om alla de som vi kommer att få. Programmeringsspråken och biblioteken försöker hänga med genom att tillhandahålla bekväma och säkra vägar till härligheten.

C++11 är inget undantag och låter ett trådstöd ingå i standardbiblioteket. Förutom vanliga klasser för trådar, mutex, lås och villkorsvariabler ingår även stöd för att lite enklare köra något asynkront. Det tillhandahålls av funktionen async och klassen future.

Grundfunktion är så här. Funktionen async kan nästan ta vad som helst som är exekverbart och returnera ett objekt av typen future. När du senare vill ha resultatet så hämtas det med metoden get:

auto f = async(doIt);
...
auto resultFromDoIt = f.get();

På så vis kan man enkelt köra kod asynkront och hämta resultatet när det behövs utan några omfattande konstruktioner.

async kan användas med funktioner, medlemsfunktioner och lambdauttryck. Man kan också skicka in parametrar till funktionerna.

Var dock försiktig med argumenten så att de inte  blir odefinierad innan den asynkrona exekveringen är klar.  Alla problem med att dela data mellan trådar löser tyvärr inte async utan det måste hanteras som vanligt med försiktighet. En lösning är att göra värdeanrop för att frikoppla anropet från exekveringen.

När det gäller felhantering så fungerar det som så att om den asynkrona exekveringen resulterar i att ett undantag kastas så fångas det och slängs igen när man gör get. Man får det alltså i sitt rätta sammanhang.

 

 

 

Publicerad i C/C++

Kategorier

WP to LinkedIn Auto Publish Powered By : XYZScripts.com