📄 generalize.h
字号:
# define AO_fetch_and_add_release_write(addr, val) \ AO_fetch_and_add_write(addr, val)# define AO_HAVE_fetch_and_add_release_write#endif#if !defined(AO_HAVE_fetch_and_add_release_write) && \ defined(AO_HAVE_fetch_and_add_release)# define AO_fetch_and_add_release_write(addr, val) \ AO_fetch_and_add_release(addr, val)# define AO_HAVE_fetch_and_add_release_write#endif#if !defined(AO_HAVE_fetch_and_add_acquire_read) && \ defined(AO_HAVE_fetch_and_add_read)# define AO_fetch_and_add_acquire_read(addr, val) \ AO_fetch_and_add_read(addr, val)# define AO_HAVE_fetch_and_add_acquire_read#endif#if !defined(AO_HAVE_fetch_and_add_acquire_read) && \ defined(AO_HAVE_fetch_and_add_acquire)# define AO_fetch_and_add_acquire_read(addr, val) \ AO_fetch_and_add_acquire(addr, val)# define AO_HAVE_fetch_and_add_acquire_read#endif#ifdef AO_NO_DD_ORDERING# if defined(AO_HAVE_fetch_and_add_acquire_read)# define AO_fetch_and_add_dd_acquire_read(addr, val) \ AO_fetch_and_add_acquire_read(addr, val)# define AO_HAVE_fetch_and_add_dd_acquire_read# endif#else# if defined(AO_HAVE_fetch_and_add)# define AO_fetch_and_add_dd_acquire_read(addr, val) \ AO_fetch_and_add(addr, val)# define AO_HAVE_fetch_and_add_dd_acquire_read# endif#endif /* Fetch_and_add1 */#if defined(AO_HAVE_fetch_and_add_full) &&\ !defined(AO_HAVE_fetch_and_add1_full)# define AO_fetch_and_add1_full(addr) AO_fetch_and_add_full(addr,1)# define AO_HAVE_fetch_and_add1_full#endif#if defined(AO_HAVE_fetch_and_add_release) &&\ !defined(AO_HAVE_fetch_and_add1_release)# define AO_fetch_and_add1_release(addr) AO_fetch_and_add_release(addr,1)# define AO_HAVE_fetch_and_add1_release#endif#if defined(AO_HAVE_fetch_and_add_acquire) &&\ !defined(AO_HAVE_fetch_and_add1_acquire)# define AO_fetch_and_add1_acquire(addr) AO_fetch_and_add_acquire(addr,1)# define AO_HAVE_fetch_and_add1_acquire#endif#if defined(AO_HAVE_fetch_and_add_write) &&\ !defined(AO_HAVE_fetch_and_add1_write)# define AO_fetch_and_add1_write(addr) AO_fetch_and_add_write(addr,1)# define AO_HAVE_fetch_and_add1_write#endif#if defined(AO_HAVE_fetch_and_add_read) &&\ !defined(AO_HAVE_fetch_and_add1_read)# define AO_fetch_and_add1_read(addr) AO_fetch_and_add_read(addr,1)# define AO_HAVE_fetch_and_add1_read#endif#if defined(AO_HAVE_fetch_and_add_release_write) &&\ !defined(AO_HAVE_fetch_and_add1_release_write)# define AO_fetch_and_add1_release_write(addr) \ AO_fetch_and_add_release_write(addr,1)# define AO_HAVE_fetch_and_add1_release_write#endif#if defined(AO_HAVE_fetch_and_add_acquire_read) &&\ !defined(AO_HAVE_fetch_and_add1_acquire_read)# define AO_fetch_and_add1_acquire_read(addr) \ AO_fetch_and_add_acquire_read(addr,1)# define AO_HAVE_fetch_and_add1_acquire_read#endif#if defined(AO_HAVE_fetch_and_add) &&\ !defined(AO_HAVE_fetch_and_add1)# define AO_fetch_and_add1(addr) \ AO_fetch_and_add(addr,1)# define AO_HAVE_fetch_and_add1#endif#if defined(AO_HAVE_fetch_and_add1_full)# if !defined(AO_HAVE_fetch_and_add1_release)# define AO_fetch_and_add1_release(addr) \ AO_fetch_and_add1_full(addr)# define AO_HAVE_fetch_and_add1_release# endif# if !defined(AO_HAVE_fetch_and_add1_acquire)# define AO_fetch_and_add1_acquire(addr) \ AO_fetch_and_add1_full(addr)# define AO_HAVE_fetch_and_add1_acquire# endif# if !defined(AO_HAVE_fetch_and_add1_write)# define AO_fetch_and_add1_write(addr) \ AO_fetch_and_add1_full(addr)# define AO_HAVE_fetch_and_add1_write# endif# if !defined(AO_HAVE_fetch_and_add1_read)# define AO_fetch_and_add1_read(addr) \ AO_fetch_and_add1_full(addr)# define AO_HAVE_fetch_and_add1_read# endif#endif /* AO_HAVE_fetch_and_add1_full */#if !defined(AO_HAVE_fetch_and_add1) && \ defined(AO_HAVE_fetch_and_add1_release)# define AO_fetch_and_add1(addr) \ AO_fetch_and_add1_release(addr)# define AO_HAVE_fetch_and_add1#endif#if !defined(AO_HAVE_fetch_and_add1) && \ defined(AO_HAVE_fetch_and_add1_acquire)# define AO_fetch_and_add1(addr) \ AO_fetch_and_add1_acquire(addr)# define AO_HAVE_fetch_and_add1#endif#if !defined(AO_HAVE_fetch_and_add1) && \ defined(AO_HAVE_fetch_and_add1_write)# define AO_fetch_and_add1(addr) \ AO_fetch_and_add1_write(addr)# define AO_HAVE_fetch_and_add1#endif#if !defined(AO_HAVE_fetch_and_add1) && \ defined(AO_HAVE_fetch_and_add1_read)# define AO_fetch_and_add1(addr) \ AO_fetch_and_add1_read(addr)# define AO_HAVE_fetch_and_add1#endif#if defined(AO_HAVE_fetch_and_add1_acquire) &&\ defined(AO_HAVE_nop_full) && \ !defined(AO_HAVE_fetch_and_add1_full)# define AO_fetch_and_add1_full(addr) \ (AO_nop_full(), AO_fetch_and_add1_acquire(addr))# define AO_HAVE_fetch_and_add1_full#endif#if !defined(AO_HAVE_fetch_and_add1_release_write) && \ defined(AO_HAVE_fetch_and_add1_write)# define AO_fetch_and_add1_release_write(addr) \ AO_fetch_and_add1_write(addr)# define AO_HAVE_fetch_and_add1_release_write#endif#if !defined(AO_HAVE_fetch_and_add1_release_write) && \ defined(AO_HAVE_fetch_and_add1_release)# define AO_fetch_and_add1_release_write(addr) \ AO_fetch_and_add1_release(addr)# define AO_HAVE_fetch_and_add1_release_write#endif#if !defined(AO_HAVE_fetch_and_add1_acquire_read) && \ defined(AO_HAVE_fetch_and_add1_read)# define AO_fetch_and_add1_acquire_read(addr) \ AO_fetch_and_add1_read(addr)# define AO_HAVE_fetch_and_add1_acquire_read#endif#if !defined(AO_HAVE_fetch_and_add1_acquire_read) && \ defined(AO_HAVE_fetch_and_add1_acquire)# define AO_fetch_and_add1_acquire_read(addr) \ AO_fetch_and_add1_acquire(addr)# define AO_HAVE_fetch_and_add1_acquire_read#endif#ifdef AO_NO_DD_ORDERING# if defined(AO_HAVE_fetch_and_add1_acquire_read)# define AO_fetch_and_add1_dd_acquire_read(addr) \ AO_fetch_and_add1_acquire_read(addr)# define AO_HAVE_fetch_and_add1_dd_acquire_read# endif#else# if defined(AO_HAVE_fetch_and_add1)# define AO_fetch_and_add1_dd_acquire_read(addr) AO_fetch_and_add1(addr)# define AO_HAVE_fetch_and_add1_dd_acquire_read# endif#endif/* Fetch_and_sub1 */#if defined(AO_HAVE_fetch_and_add_full) &&\ !defined(AO_HAVE_fetch_and_sub1_full)# define AO_fetch_and_sub1_full(addr) AO_fetch_and_add_full(addr,(AO_t)(-1))# define AO_HAVE_fetch_and_sub1_full#endif#if defined(AO_HAVE_fetch_and_add_release) &&\ !defined(AO_HAVE_fetch_and_sub1_release)# define AO_fetch_and_sub1_release(addr) \ AO_fetch_and_add_release(addr,(AO_t)(-1))# define AO_HAVE_fetch_and_sub1_release#endif#if defined(AO_HAVE_fetch_and_add_acquire) &&\ !defined(AO_HAVE_fetch_and_sub1_acquire)# define AO_fetch_and_sub1_acquire(addr) \ AO_fetch_and_add_acquire(addr,(AO_t)(-1))# define AO_HAVE_fetch_and_sub1_acquire#endif#if defined(AO_HAVE_fetch_and_add_write) &&\ !defined(AO_HAVE_fetch_and_sub1_write)# define AO_fetch_and_sub1_write(addr) \ AO_fetch_and_add_write(addr,(AO_t)(-1))# define AO_HAVE_fetch_and_sub1_write#endif#if defined(AO_HAVE_fetch_and_add_read) &&\ !defined(AO_HAVE_fetch_and_sub1_read)# define AO_fetch_and_sub1_read(addr) \ AO_fetch_and_add_read(addr,(AO_t)(-1))# define AO_HAVE_fetch_and_sub1_read#endif#if defined(AO_HAVE_fetch_and_add_release_write) &&\ !defined(AO_HAVE_fetch_and_sub1_release_write)# define AO_fetch_and_sub1_release_write(addr) \ AO_fetch_and_add_release_write(addr,(AO_t)(-1))# define AO_HAVE_fetch_and_sub1_release_write#endif#if defined(AO_HAVE_fetch_and_add_acquire_read) &&\ !defined(AO_HAVE_fetch_and_sub1_acquire_read)# define AO_fetch_and_sub1_acquire_read(addr) \ AO_fetch_and_add_acquire_read(addr,(AO_t)(-1))# define AO_HAVE_fetch_and_sub1_acquire_read#endif#if defined(AO_HAVE_fetch_and_add) &&\ !defined(AO_HAVE_fetch_and_sub1)# define AO_fetch_and_sub1(addr) \ AO_fetch_and_add(addr,(AO_t)(-1))# define AO_HAVE_fetch_and_sub1#endif#if defined(AO_HAVE_fetch_and_sub1_full)# if !defined(AO_HAVE_fetch_and_sub1_release)# define AO_fetch_and_sub1_release(addr) \ AO_fetch_and_sub1_full(addr)# define AO_HAVE_fetch_and_sub1_release# endif# if !defined(AO_HAVE_fetch_and_sub1_acquire)# define AO_fetch_and_sub1_acquire(addr) \ AO_fetch_and_sub1_full(addr)# define AO_HAVE_fetch_and_sub1_acquire# endif# if !defined(AO_HAVE_fetch_and_sub1_write)# define AO_fetch_and_sub1_write(addr) \ AO_fetch_and_sub1_full(addr)# define AO_HAVE_fetch_and_sub1_write# endif# if !defined(AO_HAVE_fetch_and_sub1_read)# define AO_fetch_and_sub1_read(addr) \ AO_fetch_and_sub1_full(addr)# define AO_HAVE_fetch_and_sub1_read# endif#endif /* AO_HAVE_fetch_and_sub1_full */#if !defined(AO_HAVE_fetch_and_sub1) && \ defined(AO_HAVE_fetch_and_sub1_release)# define AO_fetch_and_sub1(addr) \ AO_fetch_and_sub1_release(addr)# define AO_HAVE_fetch_and_sub1#endif#if !defined(AO_HAVE_fetch_and_sub1) && \ defined(AO_HAVE_fetch_and_sub1_acquire)# define AO_fetch_and_sub1(addr) \ AO_fetch_and_sub1_acquire(addr)# define AO_HAVE_fetch_and_sub1#endif#if !defined(AO_HAVE_fetch_and_sub1) && \ defined(AO_HAVE_fetch_and_sub1_write)# define AO_fetch_and_sub1(addr) \ AO_fetch_and_sub1_write(addr)# define AO_HAVE_fetch_and_sub1#endif#if !defined(AO_HAVE_fetch_and_sub1) && \ defined(AO_HAVE_fetch_and_sub1_read)# define AO_fetch_and_sub1(addr) \ AO_fetch_and_sub1_read(addr)# define AO_HAVE_fetch_and_sub1#endif#if defined(AO_HAVE_fetch_and_sub1_acquire) &&\ defined(AO_HAVE_nop_full) && \ !defined(AO_HAVE_fetch_and_sub1_full)# define AO_fetch_and_sub1_full(addr) \ (AO_nop_full(), AO_fetch_and_sub1_acquire(addr))# define AO_HAVE_fetch_and_sub1_full#endif#if !defined(AO_HAVE_fetch_and_sub1_release_write) && \ defined(AO_HAVE_fetch_and_sub1_write)# define AO_fetch_and_sub1_release_write(addr) \ AO_fetch_and_sub1_write(addr)# define AO_HAVE_fetch_and_sub1_release_write#endif#if !defined(AO_HAVE_fetch_and_sub1_release_write) && \ defined(AO_HAVE_fetch_and_sub1_release)# define AO_fetch_and_sub1_release_write(addr) \ AO_fetch_and_sub1_release(addr)# define AO_HAVE_fetch_and_sub1_release_write#endif#if !defined(AO_HAVE_fetch_and_sub1_acquire_read) && \ defined(AO_HAVE_fetch_and_sub1_read)# define AO_fetch_and_sub1_acquire_read(addr) \ AO_fetch_and_sub1_read(addr)# define AO_HAVE_fetch_and_sub1_acquire_read#endif#if !defined(AO_HAVE_fetch_and_sub1_acquire_read) && \ defined(AO_HAVE_fetch_and_sub1_acquire)# define AO_fetch_and_sub1_acquire_read(addr) \ AO_fetch_and_sub1_acquire(addr)# define AO_HAVE_fetch_and_sub1_acquire_read#endif#ifdef AO_NO_DD_ORDERING# if defined(AO_HAVE_fetch_and_sub1_acquire_read)# define AO_fetch_and_sub1_dd_acquire_read(addr) \ AO_fetch_and_sub1_acquire_read(addr)# define AO_HAVE_fetch_and_sub1_dd_acquire_read# endif#else# if defined(AO_HAVE_fetch_and_sub1)# define AO_fetch_and_sub1_dd_acquire_read(addr) AO_fetch_and_sub1(addr)# define AO_HAVE_fetch_and_sub1_dd_acquire_read# endif#endif/* Atomic or */#if defined(AO_HAVE_compare_and_swap_full) && \ !defined(AO_HAVE_or_full) AO_INLINE void AO_or_full(volatile AO_t *addr, AO_t incr) { AO_t old; do { old = *addr; } while (!AO_compare_and_swap_full(addr, old, (old | incr))); }# define AO_HAVE_or_full#endif#if defined(AO_HAVE_or_full)# if !defined(AO_HAVE_or_release)# define AO_or_release(addr, val) \ AO_or_full(addr, val)# define AO_HAVE_or_release# endif# if !defined(AO_HAVE_or_acquire)# define AO_or_acquire(addr, val) \ AO_or_full(addr, val)# define AO_HAVE_or_acquire# endif# if !defined(AO_HAVE_or_write)# define AO_or_write(addr, val) \ AO_or_full(addr, val)# define AO_HAVE_or_write# endif# if !defined(AO_HAVE_or_read)# define AO_or_read(addr, val) \ AO_or_full(addr, val)# define AO_HAVE_or_read# endif#endif /* AO_HAVE_or_full */#if !defined(AO_HAVE_or) && \ defined(AO_HAVE_or_release)# define AO_or(addr, val) \ AO_or_release(addr, val)# define AO_HAVE_or#endif#if !defined(AO_HAVE_or) && \ defined(AO_HAVE_or_acquire)# define AO_or(addr, val) \ AO_or_acquire(addr, val)# define AO_HAVE_or#endif#if !defined(AO_HAVE_or) && \ defined(AO_HAVE_or_write)# define AO_or(addr, val) \ AO_or_write(addr, val)# define AO_HAVE_or#endif#if !defined(AO_HAVE_or) && \ defined(AO_HAVE_or_read)# define AO_or(addr, val) \ AO_or_read(addr, val)# define AO_HAVE_or#endif#if defined(AO_HAVE_or_acquire) &&\ defined(AO_HAVE_nop_full) && \ !defined(AO_HAVE_or_full)# define AO_or_full(addr, val) \ (AO_nop_full(), AO_or_acquire(addr, val))#endif#if !defined(AO_HAVE_or_release_write) && \ defined(AO_HAVE_or_write)# define AO_or_release_write(addr, val) \ AO_or_write(addr, val)# define AO_HAVE_or_release_write#endif#if !defined(AO_HAVE_or_release_write) && \ defined(AO_HAVE_or_release)# define AO_or_release_write(addr, val) \ AO_or_release(addr, val)# define AO_HAVE_or_release_write#endif#if !defined(AO_HAVE_or_acquire_read) && \ defined(AO_HAVE_or_read)# define AO_or_acquire_read(addr, val) \ AO_or_read(addr, val)# define AO_HAVE_or_acquire_read#endif#if !defined(AO_HAVE_or_acquire_read) && \ defined(AO_HAVE_or_acquire)# define AO_or_acquire_read(addr, val) \ AO_or_acquire(addr, val)# define AO_HAVE_or_acquire_read#endif/* dd_aquire_read is meaningless. */ /* Test_and_set */ #if defined(AO_HAVE_test_and_set_full)# if !defined(AO_HAVE_test_and_set_release)# define AO_test_and_set_release(addr) \ AO_test_and_set_full(addr)# define AO_HAVE_test_and_set_release# endif# if !defined(AO_HAVE_test_and_set_acquire)# define AO_test_and_set_acquire(addr) \ AO_test_and_set_full(addr)# define AO_HAVE_test_and_set_acquire
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -