Så var den femte och avslutande dagen av denna helveckas kurs om Advanced C++ and Threads Programming på plats i Nanjing i södra Kina, till ända. Fredagstrafik, verkar vara ett universiellt fenomen. Det tog dubbelt så lång tid (jämfört med tidigare i veckan) för bussen att transportera oss tillbaka till hotellet i centrala Nanjing. När jag kom fram var det redan beckmörkt, men tack o lov så bröts kvällsmörkret av allt glittrande neonljus runt omkring.
Igår lade jag grunden för trådprogrammering, genom att diskutera begreppet thread och hur problemen critical section respektive race condition gestaltar sig och åtgärdas med mutex lås och condition variabler. Gårdagen avslutades med att eleverna nu hade en bra förståelse för den minsta mängden programkod som behövs för att korrekt överföra data från en tråd till en annan.
Idag generaliserade detta genom att först implementera en klass MessageQueue<T>, som hanterar alla former av enkelriktad meddelandesändning. M.h.a. denna och en basklass MessageThread<T>, kunde vi sen enkelt skriva trådbaserade appliktionsprogram, såsom en pipeline av 10 transformationstrådar eller växande pipeline av primtalstrådar.
Efter det introducerade jag begreppet rendezvous for dubbelriktad meddelandesänding och hur man kan implementera detta i C++, följt av begreppet future och hur klasserna promise<T> och future<T> i nya C++11 hänger ihop.
Efter lunch var det dags att diskutera resurshanteringsproblem, där det största seriösa problemet är deadlock. Vi kikade också på en implementation av det klassiska problemet dining philosofers. Slutligen avrundade jag med att ge lite översikter och utblickar, samt varna för att använda semaforer, eftersom det finns ett så stort överflöd av betydligt bättre synkroniseringsoperationer.
Tidigt imorgon bitti, är det dags för den långa hemresan.
Slutet gott allting gott.
Tjing tjong från Nanjing, en sista gång.
/jens