Hva er signalprogrammering?
"Signalprogrammering" er et begrep som ofte brukes til å referere til et dataprogram som først og fremst fungerer som svar på signaler eller hendelser generert av en viss endring i tilstand, eller av brukerinngang. Nesten noen del av et datasystem, fra en perifer enhet til selve operativsystemet, kan generere et signal som kan fanges opp av en applikasjon og deretter behandles. I mange former ligner signalprogrammering hendelsesdrevet programmering. Noen av de vanligste bruksområdene for signalprogrammering er med grafiske brukergrensesnitt som reagerer på brukerinngang, nettverkskommunikasjon og programmer på lavt nivå som fanger opp og håndterer spesifikke systemsignaler.
Et signal i dataprogrammering kan defineres som en melding, en hendelse eller en avbrytelse, I de bredeste vilkår er det en indikator at noen tilstand eller data har endret seg, og det er noen ganger ledsaget av ytterligere informasjon om endringen som harskjedde. Signalet kan genereres av brukeren når en tast trykkes, fra maskinvare som en skjerm når en vertikal tilbaketrekning oppstår, eller til og med fra operativsystemet når noe som en sidefeil skjer under minnetildeling.
Innenfor en applikasjon kan signalprogrammering ta på seg flere typer arkitekturer, men en av de vanligste er en lytter eller observatørmodell. I denne metoden kan et stykke brukerdefinert kode sendes på noen måte til en signalbehandler, vanligvis i operativsystemet, som deretter kaller det kodestykket for å behandle alle signaler som samsvarer med det funksjonen søker. Den typen signal en funksjon kan håndtere ofte bestemmes av en variabel kjent som en signalmaske, så noen signaler blir ikke ført til rutiner som ikke er designet for å håndtere dem.
En annen type signalprogrammering innebærer å ha et program som implementerer en kø som godtar innkommende SIGnals. Denne køen blir spurt i hovedutførelsessløyfen til programmet, og programmet reagerer når et signal kommer inn i køen. Hvert signal kan deretter logisk sorteres, håndteres, ignorerer eller sendes til en annen prosess.
Noen vanskeligheter kan oppstå i signalprogrammering når samtidige prosesser eller multitreftede applikasjoner brukes. Komplikasjonene kan oppstå hvis for eksempel to separate tråder lytter etter signaler generert av to separate brukerinngangsenheter, eller fra to nettverkssokkler. Hvis to brukere samtidig prøver å gjøre en endring av noen data, kan programdataene falle ut av synkronisering og vises annerledes enn hver bruker. Å bruke en lineær kø eller implementere trådsynkroniseringsmetoder kan bidra til å forhindre denne situasjonen.