PipeWire
1.4.1
Toggle main menu visibility
Main Page
Pages
API Reference
Data Structures
Data Structures
Data Structure Index
Examples
►
PipeWire
•
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Modules
Pages
Loading...
Searching...
No Matches
atomic.h
1
/* Atomic operations */
2
/* SPDX-FileCopyrightText: Copyright © 2023 Wim Taymans */
3
/* SPDX-License-Identifier: MIT */
4
5
#ifndef SPA_ATOMIC_H
6
#define SPA_ATOMIC_H
7
8
#ifdef __cplusplus
9
extern
"C"
{
10
#endif
11
12
#define SPA_ATOMIC_CAS(v,ov,nv) \
13
({ \
14
__typeof__(v) __ov = (ov); \
15
__atomic_compare_exchange_n(&(v), &__ov, (nv), \
16
0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); \
17
})
18
19
#define SPA_ATOMIC_DEC(s) __atomic_sub_fetch(&(s), 1, __ATOMIC_SEQ_CST)
20
#define SPA_ATOMIC_INC(s) __atomic_add_fetch(&(s), 1, __ATOMIC_SEQ_CST)
21
#define SPA_ATOMIC_LOAD(s) __atomic_load_n(&(s), __ATOMIC_SEQ_CST)
22
#define SPA_ATOMIC_STORE(s,v) __atomic_store_n(&(s), (v), __ATOMIC_SEQ_CST)
23
#define SPA_ATOMIC_XCHG(s,v) __atomic_exchange_n(&(s), (v), __ATOMIC_SEQ_CST)
24
25
#define SPA_SEQ_WRITE(s) SPA_ATOMIC_INC(s)
26
#define SPA_SEQ_WRITE_SUCCESS(s1,s2) ((s1) + 1 == (s2) && ((s2) & 1) == 0)
27
28
#define SPA_SEQ_READ(s) SPA_ATOMIC_LOAD(s)
29
#define SPA_SEQ_READ_SUCCESS(s1,s2) ((s1) == (s2) && ((s2) & 1) == 0)
30
31
#ifdef __cplusplus
32
}
/* extern "C" */
33
#endif
34
35
#endif
/* SPA_ATOMIC_H */
spa
utils
atomic.h
Generated by
1.12.0