58#if defined(QSC_SYSTEM_OS_WINDOWS)
59 typedef void* qsc_mutex;
60 typedef void* qsc_thread;
61#elif defined(QSC_SYSTEM_OS_POSIX)
63# define _XOPEN_SOURCE 700
65# ifndef _DARWIN_C_SOURCE
66# define _DARWIN_C_SOURCE
69 typedef pthread_mutex_t* qsc_mutex;
70 typedef pthread_t qsc_thread;
72# error your operating system is not supported!
75QSC_CPLUSPLUS_ENABLED_START
111#define QSC_ASYNC_PARALLEL_MAX 128ULL
456QSC_CPLUSPLUS_ENABLED_END
QSC_EXPORT_API qsc_mutex qsc_async_mutex_lock_ex(void)
Create and lock a mutex.
Definition async.c:367
QSC_EXPORT_API int32_t qsc_async_atomic_int32_increment(volatile int32_t *target)
Atomically increment an int32_t by one.
Definition async.c:245
QSC_EXPORT_API int32_t qsc_async_thread_suspend(qsc_thread handle)
Suspend a thread.
Definition async.c:594
QSC_EXPORT_API void qsc_async_thread_wait(qsc_thread handle)
Wait for a thread to complete execution.
Definition async.c:636
QSC_EXPORT_API qsc_mutex qsc_async_mutex_create(void)
Create a mutex.
Definition async.c:322
QSC_EXPORT_API qsc_thread qsc_async_thread_create_ex(void(*func)(void **), void **args)
Create a thread with multiple parameters.
Definition async.c:507
QSC_EXPORT_API void qsc_async_thread_sleep(uint32_t msec)
Suspend the calling thread for a specified number of milliseconds.
Definition async.c:576
QSC_EXPORT_API void qsc_async_mutex_unlock(qsc_mutex mtx)
Unlock a mutex.
Definition async.c:377
QSC_EXPORT_API bool qsc_async_mutex_destroy(qsc_mutex mtx)
Destroy a mutex.
Definition async.c:339
QSC_EXPORT_API int32_t qsc_async_atomic_int32_add(volatile int32_t *target, int32_t value)
Atomically add a value to an int32_t.
Definition async.c:203
QSC_EXPORT_API int32_t qsc_async_atomic_int32_exchange(volatile int32_t *target, int32_t value)
Atomically exchange an int32_t value.
Definition async.c:163
QSC_EXPORT_API int32_t qsc_async_atomic_int32_load(volatile int32_t *target)
Atomically load an int32_t value.
Definition async.c:128
QSC_EXPORT_API void qsc_async_launch_thread(void(*func)(void *), void *state)
Launch a function on a new thread.
Definition async.c:287
QSC_EXPORT_API qsc_thread qsc_async_thread_create_noargs(void(*func)(void))
Create a thread with no arguments parameter.
Definition async.c:534
QSC_EXPORT_API bool qsc_async_atomic_bool_load(volatile bool *target)
Atomically load the current value of a boolean.
Definition async.c:53
QSC_EXPORT_API bool qsc_async_atomic_bool_exchange(volatile bool *target, bool value)
Atomically swap a boolean with a new value.
Definition async.c:88
QSC_EXPORT_API void qsc_async_launch_parallel_threads(void(*func)(void *), size_t count,...)
Launch multiple threads in parallel using variadic arguments.
Definition async.c:300
QSC_EXPORT_API qsc_thread qsc_async_thread_create(void(*func)(void *), void *state)
Create a thread with one parameter.
Definition async.c:482
QSC_EXPORT_API void qsc_async_atomic_bool_store(volatile bool *target, bool value)
Atomically store a value into a boolean.
Definition async.c:74
QSC_EXPORT_API void qsc_async_thread_wait_time(qsc_thread handle, uint32_t msec)
Wait for a thread to complete execution with a timeout.
Definition async.c:646
QSC_EXPORT_API void qsc_async_thread_wait_all(qsc_thread *handles, size_t count)
Wait for an array of threads to complete execution.
Definition async.c:670
QSC_EXPORT_API bool qsc_async_thread_terminate(qsc_thread handle)
Terminate a thread.
Definition async.c:618
QSC_EXPORT_API int32_t qsc_async_thread_resume(qsc_thread handle)
Resume a suspended thread.
Definition async.c:559
QSC_EXPORT_API void qsc_async_mutex_unlock_ex(qsc_mutex mtx)
Unlock and destroy a mutex.
Definition async.c:386
QSC_EXPORT_API bool qsc_async_atomic_int32_compare_exchange(volatile int32_t *target, int32_t expected, int32_t desired)
Atomically compare and conditionally exchange an int32_t value.
Definition async.c:183
QSC_EXPORT_API void qsc_async_mutex_lock(qsc_mutex mtx)
Lock a mutex.
Definition async.c:358
QSC_EXPORT_API size_t qsc_async_processor_count(void)
Get the number of processor cores available.
Definition async.c:473
QSC_EXPORT_API int32_t qsc_async_atomic_int32_subtract(volatile int32_t *target, int32_t value)
Atomically subtract a value from an int32_t.
Definition async.c:224
QSC_EXPORT_API void qsc_async_atomic_int32_store(volatile int32_t *target, int32_t value)
Atomically store an int32_t value.
Definition async.c:149
QSC_EXPORT_API int32_t qsc_async_atomic_int32_decrement(volatile int32_t *target)
Atomically decrement an int32_t by one.
Definition async.c:266
QSC_EXPORT_API bool qsc_async_atomic_bool_compare_exchange(volatile bool *target, bool expected, bool desired)
Atomically compare a boolean and conditionally store a new value.
Definition async.c:108
Contains common definitions for the Quantum Secure Cryptographic (QSC) library.
#define QSC_EXPORT_API
API export macro for Microsoft compilers when importing from a DLL.
Definition qsccommon.h:645