2016-03-24 18:13:37 +00:00
|
|
|
---
|
|
|
|
layout: pattern
|
|
|
|
title: Semaphore
|
|
|
|
folder: semaphore
|
|
|
|
permalink: /patterns/semaphore/
|
2016-07-21 09:27:48 +03:00
|
|
|
categories: Concurrency
|
2016-03-24 18:13:37 +00:00
|
|
|
tags:
|
|
|
|
- Java
|
2016-07-21 09:27:48 +03:00
|
|
|
- Difficulty-Intermediate
|
2016-03-24 18:13:37 +00:00
|
|
|
---
|
|
|
|
|
|
|
|
## Also known as
|
|
|
|
Counting Semaphore
|
|
|
|
|
|
|
|
## Intent
|
|
|
|
Create a lock which mediates access to a pool of resources.
|
|
|
|
Only a limited number of threads, specified at the creation
|
|
|
|
of the semaphore, can access the resources at any given time.
|
|
|
|
A semaphore which only allows one concurrent access to a resource
|
|
|
|
is called a binary semaphore.
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
## Applicability
|
|
|
|
Use a Semaphore when
|
|
|
|
|
|
|
|
* you have a pool of resources to allocate to different threads
|
|
|
|
* concurrent access to a resource could lead to a race condition
|
|
|
|
|
|
|
|
## Credits
|
|
|
|
|
|
|
|
* [Semaphore(programming)] (http://en.wikipedia.org/wiki/Semaphore_(programming))
|
|
|
|
* [Semaphores] (http://tutorials.jenkov.com/java-concurrency/semaphores.html)
|