NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到

线程管理和相关操作 更多...

线程 的协作图:

class  lazy_thread
 延迟启动线程类 更多...
class  scoped_thread
 作用域线程类 更多...
class  thread
 线程类 更多...
class  thread_tracker
 线程跟踪器类 更多...

函数

NEFORCE_ALWAYS_INLINE_INLINE int64_t current_cpu () noexcept
 获取当前CPU核心编号
NEFORCE_ALWAYS_INLINE_INLINE void yield () noexcept
 让出当前线程的时间片
NEFORCE_ALWAYS_INLINE_INLINE void relax () noexcept
 线程放松
NEFORCE_ALWAYS_INLINE_INLINE void relax (const int count) noexcept
 根据计数进行线程放松
NEFORCE_ALWAYS_INLINE_INLINE void sleep_for_ms (uint32_t milliseconds) noexcept
 睡眠指定毫秒数
void NEFORCE_API sleep_for_ms (uint32_t ms, bool busy_wait) noexcept
 精确睡眠指定毫秒数
void NEFORCE_API sleep_for_us (uint64_t us) noexcept
 精确睡眠指定微秒数
void NEFORCE_API sleep_for_ns (uint64_t ns) noexcept
 精确睡眠指定纳秒数
bool NEFORCE_API affinity (size_t cpu_mask) noexcept
 设置线程的CPU亲和性
bool NEFORCE_API priority (int priority) noexcept
 设置线程优先级
NEFORCE_ALWAYS_INLINE_INLINE thread::id id () noexcept
 获取当前线程标识符
NEFORCE_ALWAYS_INLINE_INLINE thread::native_handle_type handle () noexcept
 获取当前线程句柄
NEFORCE_ALWAYS_INLINE_INLINE bool name (char *buffer, size_t size)
 获取当前线程名称
NEFORCE_ALWAYS_INLINE_INLINE bool set_name (const char *name)
 设置当前线程名称
NEFORCE_ALWAYS_INLINE_INLINE bool is_single_threaded () noexcept
 检查当前是否处于单线程模式
NEFORCE_ALWAYS_INLINE_INLINE int thread_count () noexcept
 获取当前活动线程数量
template<typename Clock, typename Dur>
void sleep_until (const time_point< Clock, Dur > &time)
 使当前线程睡眠直到指定时间点
template<typename Rep, typename Period>
void sleep_for (const duration< Rep, Period > time)
 使当前线程睡眠指定时间

详细描述

线程管理和相关操作

函数说明

◆ affinity()

bool NEFORCE_API affinity ( size_t cpu_mask)
noexcept

设置线程的CPU亲和性

参数
cpu_maskCPU掩码,每个位表示一个CPU核心
返回
设置是否成功

设置当前线程可以在哪些CPU核心上运行。

◆ current_cpu()

NEFORCE_ALWAYS_INLINE_INLINE int64_t current_cpu ( )
noexcept

获取当前CPU核心编号

返回
当前线程运行的CPU核心编号

返回当前线程正在运行的CPU核心的逻辑编号。

在文件 this_thread.hpp51 行定义.

◆ handle()

NEFORCE_ALWAYS_INLINE_INLINE thread::native_handle_type handle ( )
noexcept

◆ id()

NEFORCE_ALWAYS_INLINE_INLINE thread::id id ( )
noexcept

获取当前线程标识符

返回
当前线程的标识符

在文件 thread.hpp449 行定义.

被这些函数引用 timer_scheduler< Clock >::add_task() , 以及 meta_type::meta_type().

◆ is_single_threaded()

NEFORCE_ALWAYS_INLINE_INLINE bool is_single_threaded ( )
noexcept

检查当前是否处于单线程模式

返回
如果只有主线程运行则返回true,否则返回false

在文件 thread_tracker.hpp86 行定义.

引用了 thread_tracker::is_single_threaded().

◆ name()

NEFORCE_ALWAYS_INLINE_INLINE bool name ( char * buffer,
size_t size )

获取当前线程名称

参数
buffer存储名称的缓冲区
size缓冲区大小
返回
是否获取成功

在文件 thread.hpp475 行定义.

引用了 thread::name() , 以及 size().

被这些函数引用 ini_document::add_section(), env_document::add_variable(), toml_builder::begin_array_table(), ini_builder::begin_section(), toml_builder::begin_table(), http_server_request::cookie(), cmdline::count(), environment::exists(), registry::find(), path_tree::find_all(), path_tree::node::find_child(), registry::find_unlocked(), type_builder< T >::function(), type_builder< T >::function(), environment::get(), env_document::get_bool(), env_document::get_double(), env_document::get_int(), env_document::get_int64(), plugin_manager::get_plugin(), ini_document::get_section(), ini_document::get_section(), env_document::get_string(), env_document::get_variable(), env_document::get_variable(), cmdline::has(), http_server_request::has_cookie(), http_server_request::has_header(), http_server_response::has_header(), http_server_request::has_parameter(), ini_document::has_section(), dynamic_library::has_symbol(), env_document::has_variable(), http_server_request::header(), http_server_response::header(), ini_section::ini_section(), http_server_request::parameter(), type_builder< T >::property(), reflect(), registry::register_type(), path_tree::node::remove_child(), env_document::remove_variable(), environment::set(), http_server_request::set_cookie(), http_server::set_cookie_name(), http_server_request::set_header(), http_server_response::set_header(), ini_section::set_name(), set_name(), http_server_request::set_parameter(), env_document::set_variable(), type_builder< T >::static_function(), dynamic_library::symbol(), dynamic_library::to_symbol(), type_builder< T >::type_builder(), plugin_manager::unload_plugin(), environment::unset() , 以及 ini_builder::value_section().

◆ priority()

◆ relax() [1/2]

NEFORCE_ALWAYS_INLINE_INLINE void relax ( )
noexcept

线程放松

使用CPU特定的暂停指令让当前线程短暂放松,减少CPU功耗。 适用于自旋锁等场景中的忙等待。

在文件 this_thread.hpp78 行定义.

◆ relax() [2/2]

NEFORCE_ALWAYS_INLINE_INLINE void relax ( const int count)
noexcept

根据计数进行线程放松

参数
count放松计数

根据计数值选择不同程度的放松策略:

  • 小计数:多次调用relax()
  • 中等计数:调用一次relax()
  • 大计数:直接让出时间片

在文件 this_thread.hpp105 行定义.

引用了 count().

◆ set_name()

NEFORCE_ALWAYS_INLINE_INLINE bool set_name ( const char * name)

设置当前线程名称

参数
name线程名称
返回
是否设置成功

在文件 thread.hpp484 行定义.

引用了 name() , 以及 thread::set_name().

◆ sleep_for()

template<typename Rep, typename Period>
void sleep_for ( const duration< Rep, Period > time)

使当前线程睡眠指定时间

模板参数
Rep数值类型
Period时间单位比例
参数
time要睡眠的时间

在文件 duration.hpp884 行定义.

引用了 duration< Rep, Period >::count().

◆ sleep_for_ms() [1/2]

NEFORCE_ALWAYS_INLINE_INLINE void sleep_for_ms ( uint32_t milliseconds)
noexcept

睡眠指定毫秒数

参数
milliseconds要睡眠的毫秒数

让当前线程睡眠指定的时间。

注解
使用系统睡眠,实际睡眠时间受系统调度影响。

在文件 this_thread.hpp125 行定义.

◆ sleep_for_ms() [2/2]

void NEFORCE_API sleep_for_ms ( uint32_t ms,
bool busy_wait )
noexcept

精确睡眠指定毫秒数

参数
ms要睡眠的毫秒数
busy_wait是否使用忙等待获得更高精度

提供相对精确的睡眠功能。当use_busy_wait为true时,使用忙等待+系统睡眠组合 以获得更高的精度,但会增加CPU使用率。为false时使用纯系统睡眠。

注解
Windows平台最小精度通常为1-15ms,Linux为1ms,忙等待可达到微秒级精度

◆ sleep_for_ns()

void NEFORCE_API sleep_for_ns ( uint64_t ns)
noexcept

精确睡眠指定纳秒数

参数
ns要睡眠的纳秒数

提供纳秒级精度的睡眠,主要用于极短时间延迟。

注解
实际精度受CPU频率和指令执行时间限制。

◆ sleep_for_us()

void NEFORCE_API sleep_for_us ( uint64_t us)
noexcept

精确睡眠指定微秒数

参数
us要睡眠的微秒数

提供微秒级精度的睡眠,主要用于短时间延迟。

注解
实际精度受系统时钟精度限制。

◆ sleep_until()

template<typename Clock, typename Dur>
void sleep_until ( const time_point< Clock, Dur > & time)

使当前线程睡眠直到指定时间点

模板参数
Clock时钟类型
Dur持续时间类型
参数
time要睡眠到的时间点

跨平台的线程睡眠函数,支持稳定时钟和非稳定时钟。

  • 对于稳定时钟,计算一次睡眠时间;
  • 对于非稳定时钟,循环检查直到达到目标时间。

在文件 clocks.hpp174 行定义.

◆ thread_count()

NEFORCE_ALWAYS_INLINE_INLINE int thread_count ( )
noexcept

获取当前活动线程数量

返回
活动的NexusForce线程数量

在文件 thread_tracker.hpp92 行定义.

引用了 thread_tracker::thread_count().

◆ yield()

NEFORCE_ALWAYS_INLINE_INLINE void yield ( )
noexcept

让出当前线程的时间片

主动让出当前线程的CPU时间片,让其他线程可以运行。

在文件 this_thread.hpp64 行定义.