Skip to content

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