Hva er signalprogrammering?
"Signalprogrammering" er et begrep som ofte brukes for å referere til et dataprogram som hovedsakelig fungerer som svar på signaler eller hendelser generert av en viss endring i tilstanden, eller ved bruk av input. Nesten hvilken som helst 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 på hendelsesstyrt programmering. Noen av de vanligste bruksområdene for signalprogrammering er med grafiske brukergrensesnitt som reagerer på brukerinngang, nettverkskommunikasjon og lavt nivå programmer som fanger opp og håndterer spesifikke systemsignaler.
Et signal i programmering av datamaskiner kan defineres som en melding, en hendelse eller en avbrudd, avhengig av dens opprinnelse, systemarkitekturen eller til og med preferansen til programmereren. I det bredeste uttrykket er det en indikator på at noen tilstand eller data er endret, og noen ganger ledsages det av tilleggsinformasjon om endringen som har skjedd. Signalet kan genereres av brukeren når du trykker på en tast, fra maskinvare som en skjerm når en vertikal tilbaketrekning oppstår, eller til og med fra operativsystemet når noe som for eksempel en sidefeil skjer under minnetildeling.
I 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 overføres på en eller annen måte til en signalbehandler, vanligvis i operativsystemet, som deretter kaller det koden for å behandle alle signaler som samsvarer med hva funksjonen søker. Hvilken type signal en funksjon ofte kan håndtere, bestemmes av en variabel kjent som en signalmaske, slik at noen signaler ikke sendes 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 signaler. Denne køen blir spurt i hovedutføringssløyfen til programmet og programmet reagerer når et signal kommer inn i køen. Hvert signal kan deretter logisk sorteres, håndteres, ignoreres eller overføres til en annen prosess.
Noen problemer kan oppstå i signalprogrammering når samtidige prosesser eller flertrådede applikasjoner brukes. Komplikasjonene kan oppstå hvis for eksempel to separate tråder lytter etter signaler generert av to separate brukerinngangsenheter, eller fra to nettverksuttak. Hvis to brukere samtidig prøver å gjøre noen endringer i noen data, kan programdataene falle ut av synkronisering og fremstå annerledes for hver bruker. Å bruke en lineær kø eller implementere trådsynkroniseringsmetoder kan bidra til å forhindre denne situasjonen.