diff --git a/src/sf_service.c b/src/sf_service.c index d1781b7..42d2a1e 100644 --- a/src/sf_service.c +++ b/src/sf_service.c @@ -621,3 +621,11 @@ void sf_enable_thread_notify_ex(SFContext *sf_context, const bool enabled) thread_data->notify.enabled = enabled; } } + +struct nio_thread_data *sf_get_random_thread_data_ex(SFContext *sf_context) +{ + uint32_t index; + index = (uint32_t)((uint64_t)sf_context->work_threads * + (uint64_t)rand() / (uint64_t)RAND_MAX); + return sf_context->thread_data + index; +} diff --git a/src/sf_service.h b/src/sf_service.h index 0625eba..c7f3c55 100644 --- a/src/sf_service.h +++ b/src/sf_service.h @@ -80,6 +80,12 @@ static inline void sf_enable_realloc_task_buffer_ex(SFContext *sf_context, #define sf_enable_realloc_task_buffer(enabled) \ sf_enable_realloc_task_buffer_ex(&g_sf_context, enabled) +struct nio_thread_data *sf_get_random_thread_data_ex(SFContext *sf_context); + +#define sf_get_random_thread_data() \ + sf_get_random_thread_data_ex(&g_sf_context) + + #ifdef __cplusplus } #endif