Семафор (рачунарство)

Семафор у рачунарству означава објекат који контролише приступ одређеним ресурсима, тако што осликава стање расположивости ресурса, обично једном целобројном вредношћу. Овај концепт се најчешће користи у програмирању када постоји више процеса или нити које користе исте ресурсе, ради синхронизације.

Семафор је ненегативна целобројна променљива над којом се, осим иницијализације, могу извршити следеће операције:

  • операција захтевања јединице ресурса. Уколико су ресурси сместа доступни, односно ако је вредност семафора већа од нуле, операција се моментално окончава и вредност семафора се умањује за 1, да би осликала да је једна више јединица ресурса заузета. Уколико је вредност семафора једнака нули, то значи да ниједна јединица ресурса није расположива у том тренутку те следи фаза чекања, тј. блокирања. Када ресурси постану расположиви, тј. када вредност семафора постане већа од нуле, тада се она аутоматски умањује за 1 и процес блокирања се завршава.
  • операција сигнализирања семафору да дати процес ослобађа јединицу ресурса. Вредност семафора се повећава за 1, и било који процес који је био у стању чекања престаје са чекањем и добија јединицу ресурса.

Семафори могу имати вредност 0 или 1 (ресурси нису расположиви или ресурси јесу расположиви), али могу имати и вредности 0, 1, 2, ... (ресурси нису расположиви или толико-и-толико јединица ресурса јесте расположиво).

Семафори могу бити имплементирани на нивоу самог оперативног система (као што је случај са SVR4 семафорима из скупа објеката за подршку међупроцесне комуникације), на нивоу одређене платформе (као што је случај са мутексима у разним библиотекама за рад са нитима, нпр. Посикс), али могу бити и транспарентни и коришћени путем одређених кључних речи као што је то случај са Јавином кључном речју synchronized којом се обезбеђује синхронизован приступ ресурсима објекта неке класе.