© Hogeschool Rotterdam.

Het gebruik van pthreads

Op deze pagina leg ik met behulp van een aantal presentaties en video's uit hoe je gebruik kunt maken van de pthread library om meerdere taken concurrent uit te voeren op een microcontroller. Concurrent betekent schijnbaar gelijktijdig. Het schijnbaar gelijktijdig uitvoeren van taken wordt ook wel multitasking genoemd. De voorbeeldprogramma's voer ik uit op de CC3220S Launchpad van Texas Instruments met behulp van TI-RTOS.

Meerdere taken uitvoeren m.b.v. de pthread library

In veel embedded systemen moeten meerdere functionaliteiten worden geïmplementeerd. Het is dan overzichtelijk om elke functionaliteit als een aparte taak te programmeren en er met behulp van een Operating System voor te zorgen dat deze taken (schijnbaar) gelijktijdig worden uitgevoerd. In onderstaande video leg ik uit hoe je dit kan doen met behulp van de pthread library. 

kennisclip_pthread.pdf
kennisclip_pthread.pptx
pthread.c

Parameters doorgeven aan een pthread

Vaak is het handig om aan een taak (bij het opstarten) bepaalde argumenten mee te geven. In de volgende video leg ik uit hoe je dit kan doen.

kennisclip_pthread_par.pdf
kennisclip_pthread_par.pptx
pthread_par.c

Taken met gedeelde resources, bijvoorbeeld een gedeelde variabele

Als meerdere taken bepaalde resources delen, dan kunnen er problemen ontstaan. Denk bijvoorbeeld aan het gebruik van een gemeenschappelijke variabele of aan meerdere taken die een ADC gebruiken. In de onderstaande video leg ik uit waardoor dit probleem ontstaat en welke oplossingen Operating Systems daarvoor bieden.

kennisclip_pthread_problem.pdf
kennisclip_pthread_problem.pptx

Demonstratie van het probleem dat op kan treden bij het gebruik van gedeelde resources, bijvoorbeeld een gedeelde variabele

Het in de vorige video benoemde probleem wordt in de onderstaande video gedemonstreerd. Je kunt het programma pthread_problem.c ook op je eigen Launchpad uitvoeren.

kennisclip_pthread_problem.pdf
kennisclip_pthread_problem.pptx
pthread_shared.c
pthread_problem.c

Het beveiligen van een gedeelde resource met behulp van een mutex

Het in de vorige video's benoemde en gedemonstreerde probleem kan opgelost worden door het gebruik van een zogenoemde mutex. In de onderstaande video leg ik uit hoe je dit kunt doen. Tot slot van de video demonstreer ik dat het probleem uit de vorige video vermeden kan worden door het gebruik van een mutex.

kennisclip_pthread_mutex.pdf
kennisclip_pthread_mutex.pptx
mutex_solution.c

Het beveiligen van een gedeelde resource met behulp van een smaphore en het synchroniseren van taken met behulp van een semaphore

In plaats van een mutex kunnen we ook gebruik maken van een semaphore gebruiken om wederzijdse uitsluiting te implementeren. Een counting semaphore kan ook gebruikt worden om meer dan één tak toegang te geven tot een kritische section. Een semaphore kan bovendien ook gebruikt worden om taken onderling te synchroniseren. In de volgende video leg ik uit hoe je een semaphore kan gebruiken.

kennisclip_pthread_semaphore.pdf
kennisclip_pthread_semaphore.pptx

Communicatie tussen taken met behulp van een message queue

Met behulp van een message queue kunnen taken eenvoudig met elkaar communiceren. In de onderstaande video leg ik uit en demonstreer ik hoe je dit kunt doen.

kennisclip_pthread_mqueue.pdf
kennisclip_pthread_mqueue.pptx
mqueue.c