Files
2025-10-25 03:02:53 +03:00

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)