bg_image
header

Semaphore

A semaphore is a synchronization mechanism used in computer science and operating system theory to control access to shared resources in a parallel or distributed system. Semaphores are particularly useful for avoiding race conditions and deadlocks.

Types of Semaphores:

  1. Binary Semaphore: Also known as a "mutex" (mutual exclusion), it can only take values 0 and 1. It is used to control access to a resource by exactly one process or thread.
  2. Counting Semaphore: Can take a non-negative integer value and allows access to a specific number of concurrent resources.

How It Works:

  • Semaphore Value: The semaphore has a counter that represents the number of available resources.
    • If the counter is greater than zero, a process can use the resource, and the counter is decremented.
    • If the counter is zero, the process must wait until a resource is released.

Operations:

  • wait (P-operation, Proberen, "to test"):
    • Checks if the counter is greater than zero.
    • If so, it decrements the counter and allows the process to proceed.
    • If not, the process blocks until the counter is greater than zero.
  • signal (V-operation, Verhogen, "to increment"):
    • Increments the counter.
    • If processes are waiting, this operation wakes one of the waiting processes so it can use the resource.

Example:

Suppose we have a resource that can be used by multiple threads. A semaphore can protect this resource:

// PHP example using semaphores (pthreads extension required)

class SemaphoreExample {
    private $semaphore;

    public function __construct($initial) {
        $this->semaphore = sem_get(ftok(__FILE__, 'a'), $initial);
    }

    public function wait() {
        sem_acquire($this->semaphore);
    }

    public function signal() {
        sem_release($this->semaphore);
    }
}

// Main program
$sem = new SemaphoreExample(1); // Binary semaphore

$sem->wait();  // Enter critical section
// Access shared resource
$sem->signal();  // Leave critical section

Applications:

  • Access Control: Controlling access to shared resources like databases, files, or memory areas.
  • Thread Synchronization: Ensuring that certain sections of code are not executed concurrently by multiple threads.
  • Enforcing Order: Coordinating the execution of processes or threads in a specific order.

Semaphores are a powerful tool for making parallel programming safer and more controllable by helping to solve synchronization problems.

 

 


Created 11 Months ago
Applications Backend Circular Wait Database Databases Data Integrity Deadlock Hold and Wait Mutual Exclusion - Mutex Principles Programming Languages Programming Queue Race Condition Semaphore Software Software Architecture Strategies Web Development

Leave a Comment Cancel Reply
* Required Field