/
opt
/
alt
/
php83
/
usr
/
include
/
php
/
ext
/
swoole
/
include
/
/opt/alt/php83/usr/include/php/ext/swoole/include
mkdir
upload
Name
Size
Mode
Actions
swoole.h
25430
0644
edit
dl
rm
swoole_api.h
3511
0644
edit
dl
rm
swoole_asm_context.h
2336
0644
edit
dl
rm
swoole_async.h
3698
0644
edit
dl
rm
swoole_atomic.h
3806
0644
edit
dl
rm
swoole_base64.h
1325
0644
edit
dl
rm
swoole_buffer.h
2287
0644
edit
dl
rm
swoole_channel.h
2393
0644
edit
dl
rm
swoole_client.h
8854
0644
edit
dl
rm
swoole_config.h
9090
0644
edit
dl
rm
swoole_coroutine.h
10214
0644
edit
dl
rm
swoole_coroutine_channel.h
4284
0644
edit
dl
rm
swoole_coroutine_context.h
2813
0644
edit
dl
rm
swoole_coroutine_c_api.h
5965
0644
edit
dl
rm
swoole_coroutine_socket.h
19232
0644
edit
dl
rm
swoole_coroutine_system.h
3960
0644
edit
dl
rm
swoole_c_api.h
2126
0644
edit
dl
rm
swoole_dtls.h
2463
0644
edit
dl
rm
swoole_error.h
6255
0644
edit
dl
rm
swoole_file.h
4536
0644
edit
dl
rm
swoole_file_hook.h
3929
0644
edit
dl
rm
swoole_hash.h
9923
0644
edit
dl
rm
swoole_heap.h
1828
0644
edit
dl
rm
swoole_http.h
7157
0644
edit
dl
rm
swoole_http2.h
8584
0644
edit
dl
rm
swoole_iouring.h
3172
0644
edit
dl
rm
swoole_lock.h
3471
0644
edit
dl
rm
swoole_log.h
15705
0644
edit
dl
rm
swoole_lru_cache.h
3245
0644
edit
dl
rm
swoole_memory.h
2813
0644
edit
dl
rm
swoole_message_bus.h
6169
0644
edit
dl
rm
swoole_mime_type.h
1476
0644
edit
dl
rm
swoole_mqtt.h
2228
0644
edit
dl
rm
swoole_msg_queue.h
1970
0644
edit
dl
rm
swoole_pipe.h
2700
0644
edit
dl
rm
swoole_process_pool.h
10176
0644
edit
dl
rm
swoole_protocol.h
5291
0644
edit
dl
rm
swoole_proxy.h
2942
0644
edit
dl
rm
swoole_reactor.h
11519
0644
edit
dl
rm
swoole_redis.h
2142
0644
edit
dl
rm
swoole_server.h
44999
0644
edit
dl
rm
swoole_signal.h
1762
0644
edit
dl
rm
swoole_socket.h
19496
0644
edit
dl
rm
swoole_socket_hook.h
2284
0644
edit
dl
rm
swoole_ssl.h
5062
0644
edit
dl
rm
swoole_static_handler.h
4815
0644
edit
dl
rm
swoole_string.h
9082
0644
edit
dl
rm
swoole_table.h
7522
0644
edit
dl
rm
swoole_thread.h
2280
0644
edit
dl
rm
swoole_timer.h
4226
0644
edit
dl
rm
swoole_util.h
6765
0644
edit
dl
rm
swoole_version.h
2264
0644
edit
dl
rm
swoole_websocket.h
4638
0644
edit
dl
rm
swoole_wheel_timer.h
2538
0644
edit
dl
rm
Edit:
/opt/alt/php83/usr/include/php/ext/swoole/include/swoole_atomic.h
(3806B)
/* +----------------------------------------------------------------------+ | Swoole | +----------------------------------------------------------------------+ | This source file is subject to version 2.0 of the Apache license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.apache.org/licenses/LICENSE-2.0.html | | If you did not receive a copy of the Apache2.0 license and are unable| | to obtain it through the world-wide-web, please send a note to | | license@swoole.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Tianfeng Han <rango@swoole.com> | | Twosee <twose@qq.com> | +----------------------------------------------------------------------+ */ #pragma once typedef volatile int32_t sw_atomic_int32_t; typedef volatile uint32_t sw_atomic_uint32_t; typedef volatile int64_t sw_atomic_int64_t; typedef volatile uint64_t sw_atomic_uint64_t; typedef sw_atomic_int64_t sw_atomic_long_t; typedef sw_atomic_uint64_t sw_atomic_ulong_t; typedef sw_atomic_uint32_t sw_atomic_t; #define sw_atomic_cmp_set(lock, old, set) __sync_bool_compare_and_swap(lock, old, set) #define sw_atomic_value_cmp_set(value, expected, set) __sync_val_compare_and_swap(value, expected, set) #define sw_atomic_fetch_add(value, add) __sync_fetch_and_add(value, add) #define sw_atomic_fetch_sub(value, sub) __sync_fetch_and_sub(value, sub) #define sw_atomic_memory_barrier() __sync_synchronize() #define sw_atomic_add_fetch(value, add) __sync_add_and_fetch(value, add) #define sw_atomic_sub_fetch(value, sub) __sync_sub_and_fetch(value, sub) #if defined(__x86_64__) #define sw_atomic_cpu_pause() __asm__ __volatile__("pause") #elif defined(__aarch64__) #define sw_atomic_cpu_pause() __asm__ __volatile__("yield") #else #define sw_atomic_cpu_pause() #endif #define sw_spinlock_release(lock) __sync_lock_release(lock) #ifdef HAVE_FUTEX #include <linux/futex.h> #include <syscall.h> static inline int sw_atomic_futex_wait(sw_atomic_t *atomic, double timeout) { if (sw_atomic_cmp_set(atomic, 1, 0)) { return 0; } int ret; struct timespec _timeout; if (timeout > 0) { _timeout.tv_sec = (long) timeout; _timeout.tv_nsec = (timeout - _timeout.tv_sec) * 1000 * 1000 * 1000; ret = syscall(SYS_futex, atomic, FUTEX_WAIT, 0, &_timeout, NULL, 0); } else { ret = syscall(SYS_futex, atomic, FUTEX_WAIT, 0, NULL, NULL, 0); } if (ret == 0 && sw_atomic_cmp_set(atomic, 1, 0)) { return 0; } else { return -1; } } static inline int sw_atomic_futex_wakeup(sw_atomic_t *atomic, int n) { if (sw_atomic_cmp_set(atomic, 0, 1)) { return syscall(SYS_futex, atomic, FUTEX_WAKE, n, NULL, NULL, 0); } else { return 0; } } #else static inline int sw_atomic_futex_wait(sw_atomic_t *atomic, double timeout) { if (sw_atomic_cmp_set(atomic, (sw_atomic_t) 1, (sw_atomic_t) 0)) { return 0; } timeout = timeout <= 0 ? INT_MAX : timeout; int32_t i = (int32_t) sw_atomic_sub_fetch(atomic, 1); while (timeout > 0) { if ((int32_t) *atomic > i) { return 0; } else { usleep(1000); timeout -= 0.001; } } sw_atomic_fetch_add(atomic, 1); return -1; } static inline int sw_atomic_futex_wakeup(sw_atomic_t *atomic, int n) { if (1 == (int32_t) *atomic) { return 0; } sw_atomic_fetch_add(atomic, n); return 0; } #endif
Save
cmd:
run