Semaphore: Difference between revisions

m
Typo, better wording
(Added less technical description, roll back if I'm wrong.)
m (Typo, better wording)
Line 3:
'''Semaphore''' is a synchronization object proposed by Edsger Dijkstra. A semaphore is characterized by a natural number ''k''. A [[task]] may atomically increase or decrease ''k''. When ''k'' reaches 0 the tasks attempting to decrease it are blocked. These are released in an unspecified order when other tasks increase ''k'', one per increment.
 
The natural number ''k'' works like a count of available slots for resources. When you (asa task) want to use something (an object, a file, any resource) that can only be used by a limited number of tasks (usually one, but possibly more), you see if there are available slots (check the value of ''k''). If there are slots available (''k'' > 0), you checktake one out (decrement ''k''). When you're done with the resource, you checkfree your slot back inup (increment ''k''). If there were no slots available when you checked (''k'' = 0), you wait until one becomes available.
 
A semaphore is considered a low-level synchronization primitive. They are exposed to deadlocking.
Anonymous user