30 lines
1.0 KiB
Markdown
30 lines
1.0 KiB
Markdown
[thread.sema.general]
|
|
|
|
# 32 Concurrency support library [[thread]](./#thread)
|
|
|
|
## 32.8 Semaphore [[thread.sema]](thread.sema#general)
|
|
|
|
### 32.8.1 General [thread.sema.general]
|
|
|
|
[1](#1)
|
|
|
|
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/threads.tex#L10435)
|
|
|
|
Semaphores are lightweight synchronization primitives
|
|
used to constrain concurrent access to a shared resource[.](#1.sentence-1)
|
|
|
|
They are widely used to implement other synchronization primitives and,
|
|
whenever both are applicable, can be more efficient than condition variables[.](#1.sentence-2)
|
|
|
|
[2](#2)
|
|
|
|
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/threads.tex#L10441)
|
|
|
|
A counting semaphore is a semaphore object
|
|
that models a non-negative resource count[.](#2.sentence-1)
|
|
|
|
A binary semaphore is a semaphore object that has only two states[.](#2.sentence-2)
|
|
|
|
A binary semaphore should be more efficient than
|
|
the default implementation of a counting semaphore with a unit resource count[.](#2.sentence-3)
|