Wat is signaalprogrammering?
"Signaalprogrammering" is een term die vaak wordt gebruikt om te verwijzen naar een computerprogramma dat voornamelijk functioneert als reactie op signalen of gebeurtenissen die worden gegenereerd door een statusverandering of door gebruikersinvoer. Bijna elk deel van een computersysteem, van een randapparaat tot het besturingssysteem zelf, kan een signaal genereren dat door een toepassing kan worden vastgelegd en vervolgens kan worden verwerkt. In veel vormen lijkt signaalprogrammering op gebeurtenisgestuurde programmering. Enkele van de meest voorkomende toepassingen voor signaalprogrammering zijn grafische gebruikersinterfaces die reageren op gebruikersinvoer, netwerkcommunicatie en programma's op laag niveau die specifieke systeemsignalen vastleggen en verwerken.
Een signaal bij computerprogrammering kan worden gedefinieerd als een bericht, een gebeurtenis of een onderbreking, afhankelijk van de oorsprong, de systeemarchitectuur of zelfs de voorkeur van de programmeur. In de breedste zin is het een indicator dat een bepaalde staat of een deel van de gegevens is gewijzigd en soms gaat het vergezeld van aanvullende informatie over de opgetreden wijziging. Het signaal kan door de gebruiker worden gegenereerd wanneer een toets wordt ingedrukt, van hardware zoals een monitor wanneer een verticale terugtrekking plaatsvindt, of zelfs van het besturingssysteem wanneer iets zoals een paginafout gebeurt tijdens geheugentoewijzing.
Binnen een toepassing kan signaalprogrammering verschillende typen architecturen aannemen, maar een van de meest voorkomende is een luisteraar- of waarnemersmodel. Bij deze methode kan een stuk door de gebruiker gedefinieerde code op een of andere manier worden doorgegeven aan een signaalbehandelaar, meestal binnen het besturingssysteem, die dat stuk code vervolgens oproept om signalen te verwerken die overeenkomen met wat de functie zoekt. Het type signaal dat een functie vaak aankan, wordt bepaald door een variabele die bekend staat als een signaalmasker, dus sommige signalen worden niet doorgegeven aan routines die niet zijn ontworpen om ze te verwerken.
Een tweede type signaalprogrammering omvat het hebben van een programma dat een wachtrij implementeert die inkomende signalen accepteert. Deze wachtrij wordt opgevraagd in de hoofduitvoeringslus van het programma en het programma reageert zodra een signaal de wachtrij binnenkomt. Elk signaal kan vervolgens logisch worden gesorteerd, verwerkt, genegeerd of doorgegeven aan een ander proces.
Sommige problemen kunnen zich voordoen bij het programmeren van signalen wanneer gelijktijdige processen of multi-threaded applicaties worden gebruikt. De complicaties kunnen zich voordoen als bijvoorbeeld twee afzonderlijke threads luisteren naar signalen die worden gegenereerd door twee afzonderlijke invoerapparaten voor gebruikers of uit twee netwerksockets. Als twee gebruikers tegelijkertijd proberen een wijziging aan te brengen in sommige gegevens, kunnen de programmagegevens niet meer gesynchroniseerd worden en er voor elke gebruiker anders uitzien. Het gebruik van een lineaire wachtrij of het implementeren van threadsynchronisatiemethoden kan deze situatie helpen voorkomen.