Semaphores In Swift

Updated 21 December 2023


In concurrent programming, managing shared resources and synchronizing access to them is crucial for maintaining data integrity and preventing race conditions. One powerful synchronization primitive for achieving this is semaphores. Semaphores act as counters that allow a specified number of threads to access a resource simultaneously. In Swift, semaphores are a valuable tool for creating efficient and safe concurrent applications.

A semaphore is essentially a signaling mechanism that controls access to a shared resource. It maintains a counter representing the number of available resources. When a thread requests access to the resource, it checks the semaphore’s counter. If the counter is greater than zero, the thread is granted access, and the counter is decremented. If the counter is zero, the thread is blocked until a resource becomes available.

Benefits of Semaphores:


Swift provides a built-in Semaphore class, making it straightforward to utilize semaphores in your code. To get started, import the Dispatch module, which includes the necessary APIs. Then, create a semaphore instance with an initial value representing the maximum number of threads that can access the resource simultaneously.

To request access to the resource, call the wait() method on the semaphore. This method decrements the semaphore’s counter and blocks the thread if the counter reaches zero. When finished with the resource, call the signal() method to increment the counter and allow other threads to access the resource.


In this example, we create a semaphore with a value of 2, allowing a maximum of two concurrent tasks to execute. The performTask function represents a task that takes some time to complete. When the semaphore’s counter reaches zero, any additional tasks will be blocked until a task finishes and signals the semaphore.


In this article, I have explained Semaphores in Swift.

Thanks for reading this article ❤

If I got something wrong 🙈, let me know in the comments. I would love to improve.

Reference Link:

You can also read –

. . .

Leave a Comment

Your email address will not be published. Required fields are marked*


  • Vaishnavi
    Explained very well thank you
    • Akshay Singh (Moderator)
      Thank you for your feedback. We really appreciated your words.
  • Start a Project

      Message Sent!

      If you have more details or questions, you can reply to the received confirmation email.

      Back to Home