ARGOBOTS
140a356fc09a44696eb3487150e459266f9b5405
|
Go to the documentation of this file.
18 #ifndef ABT_CONFIG_DISABLE_MIGRATION
88 #ifndef ABT_CONFIG_ENABLE_VER_20_API
163 void (*thread_func)(
void *),
void *arg,
166 #ifndef ABT_CONFIG_ENABLE_VER_20_API
244 void (**thread_func_list)(
void *),
void **arg_list,
259 if (newthread_list == NULL) {
260 for (i = 0; i < num_threads; i++) {
266 void (*thread_f)(
void *) = thread_func_list[i];
267 void *arg = arg_list ? arg_list[i] : NULL;
275 for (i = 0; i < num_threads; i++) {
281 void (*thread_f)(
void *) = thread_func_list[i];
282 void *arg = arg_list ? arg_list[i] : NULL;
465 for (i = 0; i < num_threads; i++) {
564 for (i = 0; i < num_threads; i++) {
600 #ifndef ABT_CONFIG_ENABLE_VER_20_API
646 #ifdef ABT_CONFIG_DISABLE_THREAD_CANCEL
694 #ifndef ABT_CONFIG_ENABLE_VER_20_API
739 #ifndef ABT_CONFIG_ENABLE_VER_20_API
946 p_thread->
p_pool = p_pool;
999 #ifndef ABT_CONFIG_ENABLE_VER_20_API
1002 p_local_xstream == NULL) {
1024 LOG_DEBUG(
"[U%" PRIu64
":E%d] yield_to -> U%" PRIu64
"\n",
1111 #ifndef ABT_CONFIG_ENABLE_VER_20_API
1169 #ifndef ABT_CONFIG_ENABLE_VER_20_API
1233 #ifndef ABT_CONFIG_DISABLE_MIGRATION
1247 for (p = 0; p < p_sched->
num_pools; p++)
1316 #ifndef ABT_CONFIG_DISABLE_MIGRATION
1329 for (p = 0; p < p_sched->
num_pools; p++)
1396 #ifndef ABT_CONFIG_DISABLE_MIGRATION
1471 #ifndef ABT_CONFIG_DISABLE_MIGRATION
1483 int i, num_xstreams, abt_errno;
1493 xstreams[i++] = p_xstream;
1494 p_xstream = p_xstream->
p_next;
1502 for (i = 0; i < num_xstreams; i++) {
1513 for (p = 0; p < p_sched->
num_pools; p++) {
1584 void (*cb_func)(
ABT_thread thread,
void *cb_arg),
1587 #ifndef ABT_CONFIG_DISABLE_MIGRATION
1643 #ifndef ABT_CONFIG_DISABLE_MIGRATION
1647 #ifndef ABT_CONFIG_ENABLE_VER_20_API
1648 if (p_thread->
type &
1700 #ifndef ABT_CONFIG_DISABLE_MIGRATION
1939 p_thread->
p_arg = arg;
1974 *arg = p_thread->
p_arg;
2099 #ifndef ABT_CONFIG_ENABLE_VER_20_API
2111 #ifndef ABT_CONFIG_DISABLE_MIGRATION
2121 thread_attr.
f_cb = NULL;
2137 void (*thread_func)(
void *),
void *arg,
2143 p_thread->
p_arg = arg;
2151 if (p_thread->
p_pool != p_pool) {
2156 p_thread->
p_pool = p_pool;
2165 size_t stacksize = p_ythread->
stacksize;
2206 NULL, push_pool, p_ythread);
2233 *pp_root_ythread = p_root_ythread;
2292 LOG_DEBUG(
"[U%" PRIu64
":E%d] primary ULT freed\n",
2333 *pp_mig_data = p_mig_data;
2339 if (p_thread == NULL) {
2340 fprintf(p_os,
"%*s== NULL thread ==\n", indent,
"");
2343 int xstream_rank = p_xstream ? p_xstream->
rank : 0;
2344 const char *type, *yieldable, *state, *named, *migratable;
2349 type =
"MAIN_SCHED";
2381 state =
"TERMINATED";
2390 void *p_migration_cb_arg =
2394 "%*s== Thread (%p) ==\n"
2395 "%*sid : %" PRIu64
"\n"
2397 "%*syieldable : %s\n"
2399 "%*slast_ES : %p (%d)\n"
2404 "%*smigratable : %s\n"
2405 "%*srequest : 0x%x\n"
2406 "%*smig_cb_arg : %p\n"
2407 "%*skeytable : %p\n",
2408 indent,
"", (
void *)p_thread, indent,
"",
2410 yieldable, indent,
"", state, indent,
"", (
void *)p_xstream,
2411 xstream_rank, indent,
"", (
void *)p_thread->p_parent, indent,
2412 "", p_thread->p_arg, indent,
"", (
void *)p_thread->p_pool,
2413 indent,
"", named, indent,
"", migratable, indent,
"",
2415 p_migration_cb_arg, indent,
"",
2422 "%*sstacksize : %zu\n",
2423 indent,
"", p_ythread->
p_stack, indent,
"",
2439 if (p_thread == NULL)
2445 return p_thread->
id;
2467 #ifndef ABT_CONFIG_DISABLE_MIGRATION
2473 #ifdef ABT_CONFIG_USE_MEM_POOL
2475 ABTI_mem_alloc_ythread_mempool_desc_stack(p_local, p_attr,
2495 #ifndef ABT_CONFIG_DISABLE_MIGRATION
2500 (
void **)&p_mig_data);
2506 p_mig_data->f_migration_cb = p_attr->
f_cb;
2507 p_mig_data->p_migration_cb_arg = p_attr->
p_cb_arg;
2510 (
void *)p_mig_data);
2524 if (p_newthread->
p_stack == NULL) {
2531 size_t stack_size = p_newthread->
stacksize;
2532 void *p_stack = p_newthread->
p_stack;
2537 #if ABT_CONFIG_THREAD_TYPE != ABT_THREAD_TYPE_DYNAMIC_PROMOTION
2538 size_t stack_size = p_newthread->
stacksize;
2539 void *p_stack = p_newthread->
p_stack;
2573 #ifdef ABT_CONFIG_USE_DEBUG_LOG
2576 LOG_DEBUG(
"[U%" PRIu64
"] primary ULT created\n", thread_id);
2578 LOG_DEBUG(
"[U%" PRIu64
"] main sched ULT created\n", thread_id);
2580 LOG_DEBUG(
"[U%" PRIu64
"] created\n", thread_id);
2590 push_pool ? p_pool : NULL);
2603 *pp_newthread = p_newthread;
2607 #ifndef ABT_CONFIG_DISABLE_MIGRATION
2692 p_thread, &p_self->
thread);
2715 ABTI_thread *p_self_thread = p_local_xstream->p_thread;
2745 LOG_DEBUG(
"[U%" PRIu64
":E%d] blocked to join U%" PRIu64
"\n",
2772 LOG_DEBUG(
"[U%" PRIu64
":E%d] resume after join\n",
2794 p_local_xstream->p_thread = &p_root_ythread->
thread;
2831 LOG_DEBUG(
"[S%" PRIu64
"] start\n", p_sched->id);
2836 LOG_DEBUG(
"[S%" PRIu64
"] end\n", p_sched->id);
@ ABT_THREAD_STATE_TERMINATED
int ABT_thread_migrate_to_xstream(ABT_thread thread, ABT_xstream xstream)
Request a migration of a work unit to a specific execution stream.
#define ABTI_CHECK_NULL_SCHED_PTR(p)
struct ABT_key_opaque * ABT_key
Work-unit-specific data key handle type.
#define ABT_ERR_INV_THREAD
Error code: invalid work unit.
static ABTI_sched * ABTI_sched_get_ptr(ABT_sched sched)
int ABT_thread_get_arg(ABT_thread thread, void **arg)
Retrieve an argument for a work unit function of a work unit.
int ABT_thread_resume(ABT_thread thread)
Resume a ULT.
void ABTI_thread_print(ABTI_thread *p_thread, FILE *p_os, int indent)
static void ABTI_mem_free_thread(ABTI_local *p_local, ABTI_thread *p_thread)
int ABT_thread_is_primary(ABT_thread thread, ABT_bool *is_primary)
Check if a work unit is the primary ULT.
void(* f_migration_cb)(ABT_thread, void *)
int ABT_bool
Boolean type.
static void ABTD_atomic_release_store_ythread_context_ptr(ABTD_ythread_context_atomic_ptr *ptr, ABTD_ythread_context *p_ctx)
@ ABTI_XSTREAM_TYPE_PRIMARY
#define ABTI_THREAD_REQ_TERMINATE
#define ABTI_THREAD_TYPE_ROOT
#define ABTI_SETUP_LOCAL_XSTREAM(pp_local_xstream)
static void * ABTI_ktable_get(ABTD_atomic_ptr *pp_ktable, ABTI_key *p_key)
static ABTU_ret_err int ABTI_mem_alloc_ythread_default(ABTI_local *p_local, ABTI_ythread **pp_ythread)
void ABTI_ktable_free(ABTI_local *p_local, ABTI_ktable *p_ktable)
static void ABTD_ythread_context_init(ABTD_ythread_context *p_link, ABTD_ythread_context *p_newctx)
static uint32_t ABTD_atomic_acquire_load_uint32(const ABTD_atomic_uint32 *ptr)
void ABTD_ythread_exit(ABTI_xstream *p_local_xstream, ABTI_ythread *p_ythread)
static void thread_main_sched_func(void *arg)
struct ABT_thread_attr_opaque * ABT_thread_attr
ULT attribute handle type.
struct ABT_thread_opaque * ABT_thread
Work unit handle type.
ABTD_atomic_ptr p_migration_pool
static ABTD_atomic_uint64 g_thread_id
int ABT_thread_join_many(int num_threads, ABT_thread *thread_list)
Wait for a set of work units to terminate.
static ABTI_key * ABTI_key_get_ptr(ABT_key key)
int ABT_thread_create_many(int num_threads, ABT_pool *pool_list, void(**thread_func_list)(void *), void **arg_list, ABT_thread_attr attr, ABT_thread *newthread_list)
Create a set of new ULTs.
static ABTI_ythread * ABTI_ythread_context_switch_to_sibling(ABTI_xstream **pp_local_xstream, ABTI_ythread *p_old, ABTI_ythread *p_new)
static ABTU_ret_err int ythread_create(ABTI_local *p_local, ABTI_pool *p_pool, void(*thread_func)(void *), void *arg, ABTI_thread_attr *p_attr, ABTI_thread_type thread_type, ABTI_sched *p_sched, ABT_bool push_pool, ABTI_ythread **pp_newthread)
void ABTI_ythread_free_primary(ABTI_local *p_local, ABTI_ythread *p_ythread)
ABTU_ret_err int ABTI_ythread_create_root(ABTI_local *p_local, ABTI_xstream *p_xstream, ABTI_ythread **pp_root_ythread)
int ABT_thread_get_stacksize(ABT_thread thread, size_t *stacksize)
Get a stack size of a work unit.
#define ABTI_THREAD_TYPE_MEM_MEMPOOL_DESC
ABTU_noreturn void ABTI_ythread_exit(ABTI_xstream *p_local_xstream, ABTI_ythread *p_ythread)
ABTU_ret_err int ABTI_ythread_create_main_sched(ABTI_local *p_local, ABTI_xstream *p_xstream, ABTI_sched *p_sched)
int ABT_thread_set_migratable(ABT_thread thread, ABT_bool migratable)
Set the migratability in a work unit.
#define ABT_ERR_POOL
Error code: an error related to a pool.
#define ABTI_THREAD_INIT_ID
#define ABTI_CHECK_ERROR(abt_errno)
static ABT_thread_attr ABTI_thread_attr_get_handle(ABTI_thread_attr *p_attr)
int ABT_thread_get_id(ABT_thread thread, ABT_unit_id *thread_id)
Get ID of a work unit.
ABTI_global * gp_ABTI_global
static ABT_sched ABTI_sched_get_handle(ABTI_sched *p_sched)
#define ABTI_THREAD_TYPE_YIELDABLE
ABTD_atomic_uint32 request
static ABTI_ythread * ABTI_thread_get_ythread(ABTI_thread *p_thread)
#define ABTI_SETUP_LOCAL_YTHREAD_WITH_INIT_CHECK(pp_local_xstream, pp_ythread)
static void ABTI_pool_push(ABTI_pool *p_pool, ABT_unit unit)
static ABT_thread ABTI_thread_get_handle(ABTI_thread *p_thread)
ABT_unit_create_from_thread_fn u_create_from_thread
#define ABTI_THREAD_TYPE_MEM_MEMPOOL_DESC_STACK
void ABTI_thread_reset_id(void)
#define ABTI_IS_ERROR_CHECK_ENABLED
#define ABTI_CHECK_YIELDABLE(p_thread, pp_ythread, abt_errno)
ABTD_ythread_context_atomic_ptr p_link
static ABTI_thread_attr * ABTI_thread_attr_get_ptr(ABT_thread_attr attr)
#define ABTI_KEY_STATIC_INITIALIZER(f_destructor, id)
int ABT_thread_get_state(ABT_thread thread, ABT_thread_state *state)
Get a state of a work unit.
struct ABT_pool_opaque * ABT_pool
Pool handle type.
#define ABT_ERR_THREAD
Error code: an error related to a work unit.
ABT_thread_state
State of a work unit.
int ABT_thread_free(ABT_thread *thread)
Free a work unit.
static ABTI_key g_thread_sched_key
#define ABTU_unreachable()
struct ABT_sched_opaque * ABT_sched
Scheduler handle type.
#define ABTI_THREAD_TYPE_PRIMARY
void ABTI_ythread_free_root(ABTI_local *p_local, ABTI_ythread *p_ythread)
int ABT_thread_migrate_to_sched(ABT_thread thread, ABT_sched sched)
Request a migration of a work unit to a specific scheduler.
ABTU_ret_err int ABTI_ythread_create_sched(ABTI_local *p_local, ABTI_pool *p_pool, ABTI_sched *p_sched)
int ABT_thread_exit(void)
Terminate a calling ULT.
static ABT_xstream ABTI_xstream_get_handle(ABTI_xstream *p_xstream)
static void ABTD_atomic_release_store_uint64(ABTD_atomic_uint64 *ptr, uint64_t val)
@ ABT_THREAD_STATE_BLOCKED
#define ABTI_CHECK_NULL_THREAD_PTR(p)
#define ABTI_THREAD_REQ_MIGRATE
int ABT_thread_set_specific(ABT_thread thread, ABT_key key, void *value)
Set a value with a work-unit-specific key in a work unit.
static void ABTD_atomic_relaxed_store_uint32(ABTD_atomic_uint32 *ptr, uint32_t val)
static int ABTD_atomic_relaxed_load_int(const ABTD_atomic_int *ptr)
#define ABTI_KEY_ID_STACKABLE_SCHED
ABTU_ret_err int ABTI_thread_get_mig_data(ABTI_local *p_local, ABTI_thread *p_thread, ABTI_thread_mig_data **pp_mig_data)
static ABTU_ret_err int thread_migrate_to_pool(ABTI_local *p_local, ABTI_thread *p_thread, ABTI_pool *p_pool)
uint64_t ABT_unit_id
Work unit ID type.
struct ABT_xstream_opaque * ABT_xstream
Execution stream handle type.
static ABTI_ythread * ABTI_thread_get_ythread_or_null(ABTI_thread *p_thread)
ABT_unit_is_in_pool_fn u_is_in_pool
int ABT_thread_yield(void)
Yield the calling ULT to its parent ULT.
int ABT_thread_get_last_pool(ABT_thread thread, ABT_pool *pool)
Get the last pool of a work unit.
#define ABTI_HANDLE_ERROR(n)
static void thread_key_destructor_migration(void *p_value)
static void ABTD_atomic_pause(void)
static ABTU_ret_err int ABTU_malloc(size_t size, void **p_ptr)
#define LOG_DEBUG(fmt,...)
#define ABTI_THREAD_TYPE_MIGRATABLE
static ABTU_ret_err int ABTI_pool_remove(ABTI_pool *p_pool, ABT_unit unit)
void ABTI_thread_join(ABTI_local **pp_local, ABTI_thread *p_thread)
static void ABTD_atomic_relaxed_store_int(ABTD_atomic_int *ptr, int val)
int ABT_thread_set_associated_pool(ABT_thread thread, ABT_pool pool)
Set an associated pool for the target work unit.
int ABT_thread_join(ABT_thread thread)
Wait for a work unit to terminate.
#define ABTD_ATOMIC_UINT64_STATIC_INITIALIZER(val)
static uint32_t ABTD_atomic_relaxed_load_uint32(const ABTD_atomic_uint32 *ptr)
ABTI_sched * p_main_sched
ABT_pool_remove_fn p_remove
void * p_migration_cb_arg
#define ABT_ERR_INV_THREAD_ATTR
Error code: invalid ULT attribute.
static void ABTI_thread_attr_init(ABTI_thread_attr *p_attr, void *p_stack, size_t stacksize, ABTI_thread_type thread_type, ABT_bool migratable)
ABTU_ret_err int ABTI_sched_get_migration_pool(ABTI_sched *, ABTI_pool *, ABTI_pool **)
static void thread_root_func(void *arg)
void ABTI_xstream_run_unit(ABTI_xstream **pp_local_xstream, ABT_unit unit, ABTI_pool *p_pool)
static void ABTI_spinlock_release(ABTI_spinlock *p_lock)
static void ABTI_spinlock_acquire(ABTI_spinlock *p_lock)
struct ABT_unit_opaque * ABT_unit
Work unit handle type for scheduling.
static void thread_join(ABTI_local **pp_local, ABTI_thread *p_thread)
static void ABTD_ythread_context_invalidate(ABTD_ythread_context *p_newctx)
int ABT_thread_is_unnamed(ABT_thread thread, ABT_bool *is_unnamed)
Check if a work unit is unnamed.
#define ABTI_ASSERT(cond)
static void thread_free(ABTI_local *p_local, ABTI_thread *p_thread, ABT_bool free_unit)
static ABTU_ret_err int ABTU_calloc(size_t num, size_t size, void **p_ptr)
#define ABT_ERR_MIGRATION_TARGET
Error code: an error related to a migration target.
static ABTU_ret_err int ABTI_mem_alloc_ythread_mempool_desc(ABTI_local *p_local, ABTI_thread_attr *p_attr, ABTI_ythread **pp_ythread)
#define ABT_THREAD_ATTR_NULL
static ABTI_local * ABTI_local_get_local(void)
static ABTI_pool * ABTI_xstream_get_main_pool(ABTI_xstream *p_xstream)
static ABTU_ret_err int ABTI_ktable_set(ABTI_local *p_local, ABTD_atomic_ptr *pp_ktable, ABTI_key *p_key, void *value)
#define ABTI_CHECK_NULL_YTHREAD_PTR(p)
int ABT_thread_create_on_xstream(ABT_xstream xstream, void(*thread_func)(void *), void *arg, ABT_thread_attr attr, ABT_thread *newthread)
Create a new ULT associated with an execution stream.
static void thread_key_destructor_stackable_sched(void *p_value)
ABTI_ythread * p_primary_ythread
int ABT_thread_set_arg(ABT_thread thread, void *arg)
Set an argument for a work unit function of a work unit.
#define ABT_SUCCESS
Error code: the routine returns successfully.
static ABTI_local * ABTI_local_get_local_uninlined(void)
static ABT_unit_id thread_get_new_id(void)
int ABT_thread_get_last_xstream(ABT_thread thread, ABT_xstream *xstream)
Get an execution stream associated with a work unit.
#define ABTI_SETUP_LOCAL_YTHREAD(pp_local_xstream, pp_ythread)
ABTI_xstream * p_xstream_head
static int ABTD_atomic_acquire_load_int(const ABTD_atomic_int *ptr)
void ABTI_ythread_set_blocked(ABTI_ythread *p_ythread)
#define ABTI_THREAD_REQ_CANCEL
int ABT_thread_migrate(ABT_thread thread)
Request a migration of a work unit to any available execution streams.
static ABTI_xstream * ABTI_local_get_xstream_or_null(ABTI_local *p_local)
int ABT_thread_self_id(ABT_unit_id *id)
Get ID of the calling work unit.
ABTI_spinlock xstream_list_lock
#define ABTI_IS_EXT_THREAD_ENABLED
ABTU_ret_err int ABTI_thread_attr_dup(const ABTI_thread_attr *p_attr, ABTI_thread_attr **pp_dup_attr) ABTU_ret_err
int ABT_thread_self(ABT_thread *thread)
Get the calling work unit.
static ABTI_local * ABTI_xstream_get_local(ABTI_xstream *p_xstream)
uint32_t ABTI_thread_type
int ABT_thread_free_many(int num_threads, ABT_thread *thread_list)
Free a set of work units.
#define ABTU_unlikely(cond)
#define ABT_TRUE
True constant for ABT_bool.
static ABTI_pool * ABTI_pool_get_ptr(ABT_pool pool)
ABTD_atomic_uint32 request
static ABT_unit ABTI_pool_pop(ABTI_pool *p_pool)
@ ABT_XSTREAM_STATE_RUNNING
void ABTI_sched_free(ABTI_local *p_local, ABTI_sched *p_sched, ABT_bool force_free)
int ABT_thread_set_callback(ABT_thread thread, void(*cb_func)(ABT_thread thread, void *cb_arg), void *cb_arg)
Set a callback function in a work unit.
#define ABT_ERR_MIGRATION_NA
Error code: migration is not supported.
#define ABTI_KTABLE_LOCKED
ABTI_ythread * p_root_ythread
#define ABT_FALSE
False constant for ABT_bool.
void ABTI_thread_free(ABTI_local *p_local, ABTI_thread *p_thread)
void ABTI_ythread_set_ready(ABTI_local *p_local, ABTI_ythread *p_ythread)
int ABT_thread_is_migratable(ABT_thread thread, ABT_bool *is_migratable)
Get the migratability of a work unit.
#define ABTI_THREAD_TYPE_MAIN_SCHED
void ABTI_ythread_suspend(ABTI_xstream **pp_local_xstream, ABTI_ythread *p_ythread, ABT_sync_event_type sync_event_type, void *p_sync)
static void ABTD_ythread_context_create(ABTD_ythread_context *p_link, size_t stacksize, void *p_stack, ABTD_ythread_context *p_newctx)
#define ABTI_CHECK_NULL_POOL_PTR(p)
static uint64_t ABTD_atomic_fetch_add_uint64(ABTD_atomic_uint64 *ptr, uint64_t v)
#define ABTI_CHECK_NULL_XSTREAM_PTR(p)
int ABT_thread_create(ABT_pool pool, void(*thread_func)(void *), void *arg, ABT_thread_attr attr, ABT_thread *newthread)
Create a new ULT.
static void ABTU_free(void *ptr)
static uint32_t ABTD_atomic_fetch_or_uint32(ABTD_atomic_uint32 *ptr, uint32_t v)
#define ABTI_THREAD_TYPE_NAMED
static ABTI_xstream * ABTI_xstream_get_ptr(ABT_xstream xstream)
ABTI_xstream * p_last_xstream
ABTD_atomic_ptr p_keytable
ABTU_ret_err int ABTI_ythread_create_primary(ABTI_local *p_local, ABTI_xstream *p_xstream, ABTI_ythread **p_ythread)
static void ABTI_pool_inc_num_blocked(ABTI_pool *p_pool)
ABTI_thread_type thread_type
struct ABTI_local ABTI_local
static void thread_join_busywait(ABTI_thread *p_thread)
void(* f_cb)(ABT_thread, void *)
static void ABTI_ythread_yield(ABTI_xstream **pp_local_xstream, ABTI_ythread *p_ythread, ABT_sync_event_type sync_event_type, void *p_sync)
static ABTU_noreturn void ABTD_ythread_finish_context(ABTD_ythread_context *p_old, ABTD_ythread_context *p_new)
static void * ABTD_atomic_acquire_load_ptr(const ABTD_atomic_ptr *ptr)
#define ABTI_KEY_ID_MIGRATION
int ABT_thread_yield_to(ABT_thread thread)
Yield the calling ULT to the specific ULT.
static ABTI_key g_thread_mig_data_key
int ABT_thread_get_last_pool_id(ABT_thread thread, int *id)
Get the last pool's ID of a work unit.
#define ABTI_CHECK_TRUE(cond, abt_errno)
int ABT_thread_revive(ABT_pool pool, void(*thread_func)(void *), void *arg, ABT_thread *thread)
Revive a terminated work unit.
#define ABTI_CHECK_NULL_KEY_PTR(p)
static ABTU_ret_err int ABTI_mem_alloc_ythread_malloc_desc_stack(ABTI_thread_attr *p_attr, ABTI_ythread **pp_ythread)
int ABT_thread_equal(ABT_thread thread1, ABT_thread thread2, ABT_bool *result)
Compare two work unit handles for equality.
#define ABT_ERR_FEATURE_NA
Error code: unsupported feature.
@ ABT_THREAD_STATE_RUNNING
static void thread_join_yield_thread(ABTI_xstream **pp_local_xstream, ABTI_ythread *p_self, ABTI_thread *p_thread)
static void ABTD_atomic_relaxed_store_ptr(ABTD_atomic_ptr *ptr, void *val)
int ABT_thread_get_specific(ABT_thread thread, ABT_key key, void **value)
Get a value associated with a work-unit-specific key in a work unit.
int ABT_thread_migrate_to_pool(ABT_thread thread, ABT_pool pool)
Request a migration of a work unit to a specific pool.
static void ABTD_atomic_release_store_uint32(ABTD_atomic_uint32 *ptr, uint32_t val)
static ABTI_xstream * ABTI_local_get_xstream(ABTI_local *p_local)
void ABTI_thread_revive(ABTI_local *p_local, ABTI_pool *p_pool, void(*thread_func)(void *), void *arg, ABTI_thread *p_thread)
static void ABTD_atomic_release_store_int(ABTD_atomic_int *ptr, int val)
ABT_unit_id ABTI_thread_get_id(ABTI_thread *p_thread)
int ABT_thread_cancel(ABT_thread thread)
Send a termination request to a work unit.
#define ABTI_SCHED_REQ_FINISH
static ABTI_thread * ABTI_thread_get_ptr(ABT_thread thread)
static ABT_pool ABTI_pool_get_handle(ABTI_pool *p_pool)
@ ABT_XSTREAM_STATE_TERMINATED
static ABTU_ret_err int ABTI_ktable_set_unsafe(ABTI_local *p_local, ABTI_ktable **pp_ktable, ABTI_key *p_key, void *value)
#define ABTI_THREAD_TYPE_MEM_MALLOC_DESC_STACK
size_t ABTI_sched_get_effective_size(ABTI_local *p_local, ABTI_sched *p_sched)
static void ABTI_pool_dec_num_blocked(ABTI_pool *p_pool)
#define ABTI_THREAD_TYPE_MEM_MALLOC_DESC
static void ABTI_thread_set_request(ABTI_thread *p_thread, uint32_t req)
int ABT_thread_get_attr(ABT_thread thread, ABT_thread_attr *attr)
Get attributes of a work unit.
#define ABTI_THREAD_REQ_JOIN