Semafor (programmering)
Den här artikeln behöver källhänvisningar för att kunna verifieras. (2014-06) Åtgärda genom att lägga till pålitliga källor (gärna som fotnoter). Uppgifter utan källhänvisning kan ifrågasättas och tas bort utan att det behöver diskuteras på diskussionssidan. |
Användning av en semafor är inom programmering en teknik som används för att begränsa åtkomsten till en delad resurs eller process för flera samtidigt pågående processer under multikörning. Semaforer används i flera operativsystem som en primitiv synkroniseringsmetod.
En binär semafor fungerar ungefär som en mutex (mutual exclusion), dvs den håller koll på en resurs (eller en bit kod) som endast får användas av en tråd åt gången.
En räknande semafor behandlar resurser som kan användas av flera trådar samtidigt. Semaforens värde representerar antalet lediga resurser. Räknarsemaforer har två operationer: wait och signal, dessa kallas även up och down.
Wait-operationen körs när en process begär åtkomst till resursen. Semaforens värde minskas med 1 för att indikera att en resurs används. Värdet 0 indikerar att resurserna är slut (värdet kan alltså aldrig bli negativt). Om en tråd försöker komma åt resurser då semaforen har värdet 0 kommer tråden att försättas i sovläge och läggas i semaforens vänte-kö, i väntan på att en resurs frigörs.
Signal-operationen frigör en använd resurs, ökar semaforens värde, samt tar bort en av trådarna från vänte-kön och startar den igen.