Synchronization API Reference¶
This section collects synchronization APIs used throughout the synchronization labs.
The APIs are grouped by execution environment because Linux userspace and Linux kernel use different synchronization primitives.
Atomics and Memory Ordering¶
C11 atomics are documented in a separate API group.
| API Group | Purpose |
|---|---|
| C11 Atomics | Atomic operations and memory ordering primitives |
Userspace Synchronization¶
Mutex¶
| API | Purpose |
|---|---|
| pthread_mutex_lock | Acquire a pthread mutex |
| pthread_mutex_unlock | Release a pthread mutex |
Condition Variable¶
| API | Purpose |
|---|---|
| pthread_cond_wait | Wait for a condition |
| pthread_cond_signal | Wake one waiting thread |
| pthread_cond_broadcast | Wake all waiting threads |
Reader-Writer Lock¶
| API | Purpose |
|---|---|
| pthread_rwlock_rdlock | Acquire reader lock |
| pthread_rwlock_wrlock | Acquire writer lock |
| pthread_rwlock_unlock | Release reader/writer lock |
Futex¶
| API | Purpose |
|---|---|
| futex | Fast userspace synchronization primitive |
Kernel Synchronization¶
Completion¶
| API | Purpose |
|---|---|
| init_completion | Initialize a completion object |
| reinit_completion | Reset a completion object for reuse |
| wait_for_completion | Wait indefinitely for completion |
| wait_for_completion_timeout | Wait for completion with timeout |
| complete | Signal completion and wake one waiter |
| complete_all | Signal completion and wake all waiters |
Notifier Chain¶
| API | Purpose |
|---|---|
| struct notifier_block | Describe a notifier callback entry |
| BLOCKING_NOTIFIER_HEAD | Declare a blocking notifier chain |
| blocking_notifier_chain_register | Register a blocking notifier callback |
| blocking_notifier_chain_unregister | Unregister a blocking notifier callback |
| blocking_notifier_call_chain | Broadcast an event through a blocking notifier chain |
| ATOMIC_NOTIFIER_HEAD | Declare an atomic notifier chain |
| atomic_notifier_chain_register | Register an atomic notifier callback |
| atomic_notifier_chain_unregister | Unregister an atomic notifier callback |
| atomic_notifier_call_chain | Broadcast an event through an atomic notifier chain |
| RAW_NOTIFIER_HEAD | Declare a raw notifier chain |
RCU¶
| API | Purpose |
|---|---|
| rcu_read_lock | Enter an RCU read-side critical section |
| rcu_read_unlock | Leave an RCU read-side critical section |
| rcu_dereference | Safely acquire an RCU-protected pointer |
| rcu_assign_pointer | Safely publish an RCU-protected pointer |
| synchronize_rcu | Wait for an RCU grace period to complete |
| call_rcu | Schedule deferred reclamation after a grace period |