Skip to main content


In computer science, a semaphore is a variable or abstract data type that provides a simple but useful abstraction for controlling access by multiple processes to a common resource in a parallel programming or multi user environment.
A useful way to think of a semaphore is as a record of how many units of a particular resource are available, coupled with operations to safely (i.e., without race conditions) adjust that record as units are required or become free, and if necessary wait until a unit of the resource becomes available. Semaphores are a useful tool in the prevention of race conditions; however, their use is by no means a guarantee that a program is free from these problems. Semaphores which allow an arbitrary resource count are called counting semaphores, while semaphores which are restricted to the values 0 and 1 (or locked/unlocked, unavailable/available) are called binary semaphores (same functionality that mutexes have).
The semaphore concept was invented by Dutch computer scientist Edsger Dijkstra in 1965, and the concept has found widespread use in a variety of operating systems.

Important observations

When used for a pool of resources, a semaphore does not keep track of which of the resources are free, only how many there are. Some other mechanism (possibly involving more semaphores) may be required to select a particular free resource.
Processes are trusted to follow the protocol. Fairness and safety are likely to be compromised (which practically means a program may behave slowly, act erratically, hang or crash) if even a single process acts incorrectly. This includes:
  • requesting a resource and forgetting to release it
  • releasing a resource that was never requested
  • holding a resource for a long time without needing it
  • using a resource without requesting it first (or after releasing it).
Even if all processes follow these rules, multi-resource deadlock may still occur when there are different resources managed by different semaphores and when processes need to use more than one resource at a time, as illustrated by the dining philosophers problem.


  1. hi..Im student from Informatics engineering, this article is very informative, thanks for sharing :)


Post a Comment

Popular posts from this blog

Factors to consider when selecting a transmission medium (TRANSMISSION IMPAIRMENTS)

There are many transmission media available and each media type has certain characteristics, so it’s necessary to aware about all the benefits and shortcomings of each one.
•Cost & Ease of installation •Attenuation •Delay Distortion •Capacity (Bandwidth and throughput) •Transmission delay •Propagation delay •Interference •Noise •Thermal/White Noise •Intermodulation Noise •Crosstalk •Impulse Noise
•Cost & Ease of installation : Costing is an important factors , when we select a media. Because absolute cost and ease of installation data are difficult to provide without referring to specific implementations, one can make relative judgments by comparing each medium to the others. •Attenuation : Attenuation refers to the tendency of electromagnetic waves to weaken or become distorted during transmission. It is loss of energy as the signals propagates outwards. Attenuation increases with distance, as a wave passes through a medium, some of its energy is absorbed or scattered by the medium’s ph…

Signed and Unsigned Numbers

Service primitives of Network Software

Service primitivesA service is formally by a set of primitives or operations a user or other entities can invoke to access the service. That is what materializes an interface. We commonly classify service primitives into 4 classes:
primitivemeaningrequest an entity is requesting a service (we are requesting a connection to a remote computer) indication an entity is informed of an event (the receiver has just received a connection request) response an entity is responding to an event (the receiver is sending the permission to connect) confirm an entity acknowledges the response to its request (the sender acknoledge the permission to connect to the remote host) Most primitives need parameters. For instance, parameters of a CONNECT.request (used to query a connection) are the machine you want to connect to, the service you want to use (FTP, telnet...) and the maximum size of exchanged packets.
A acknowledged service is a service that requires a request, an indicatio…