MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
线程

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

class  scoped_thread
 作用域线程类 更多...
class  thread
 线程类 更多...

函数

MSTL_ALWAYS_INLINE_INLINE int64_t current_cpu () noexcept
 获取当前CPU核心编号
MSTL_ALWAYS_INLINE_INLINE void yield () noexcept
 让出当前线程的时间片
MSTL_ALWAYS_INLINE_INLINE void relax () noexcept
 线程放松
MSTL_ALWAYS_INLINE_INLINE void relax (const int count) noexcept
 根据计数进行线程放松
MSTL_ALWAYS_INLINE_INLINE void sleep_for_ms (uint32_t milliseconds) noexcept
 睡眠指定毫秒数
void MSTL_API sleep_for_ms (uint32_t ms, bool busy_wait) noexcept
 精确睡眠指定毫秒数
void MSTL_API sleep_for_us (uint64_t ms) noexcept
 精确睡眠指定微秒数
void MSTL_API sleep_for_ns (uint64_t ns) noexcept
 精确睡眠指定纳秒数
bool MSTL_API affinity (size_t cpu_mask) noexcept
 设置线程的CPU亲和性
bool MSTL_API priority (int priority) noexcept
 设置线程优先级
MSTL_ALWAYS_INLINE_INLINE thread::id id () 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 MSTL_API affinity ( size_t cpu_mask)
noexcept

设置线程的CPU亲和性

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

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

◆ current_cpu()

MSTL_ALWAYS_INLINE_INLINE int64_t current_cpu ( )
noexcept

获取当前CPU核心编号

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

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

在文件 this_thread.hpp48 行定义.

◆ id()

MSTL_ALWAYS_INLINE_INLINE thread::id id ( )
noexcept

获取当前线程标识符

返回
当前线程的标识符

在文件 thread.hpp311 行定义.

◆ priority()

bool MSTL_API priority ( int priority)
noexcept

设置线程优先级

参数
priority优先级值
返回
设置是否成功

设置当前线程的调度优先级。

引用了 MSTL_END_NAMESPACE__, MSTL_END_THIS_THREAD__ , 以及 priority().

被这些函数引用 priority().

◆ relax() [1/2]

MSTL_ALWAYS_INLINE_INLINE void relax ( )
noexcept

线程放松

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

在文件 this_thread.hpp75 行定义.

◆ relax() [2/2]

MSTL_ALWAYS_INLINE_INLINE void relax ( const int count)
noexcept

根据计数进行线程放松

参数
count放松计数

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

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

在文件 this_thread.hpp102 行定义.

引用了 count().

◆ sleep_for()

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

使当前线程睡眠指定时间

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

在文件 duration.hpp906 行定义.

引用了 _INNER, duration< Rep, Period >::count() , 以及 duration< Rep, Period >::zero().

被这些函数引用 sleep_until().

◆ sleep_for_ms() [1/2]

MSTL_ALWAYS_INLINE_INLINE void sleep_for_ms ( uint32_t milliseconds)
noexcept

睡眠指定毫秒数

参数
milliseconds要睡眠的毫秒数

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

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

在文件 this_thread.hpp122 行定义.

◆ sleep_for_ms() [2/2]

void MSTL_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 MSTL_API sleep_for_ns ( uint64_t ns)
noexcept

精确睡眠指定纳秒数

参数
ns要睡眠的纳秒数

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

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

◆ sleep_for_us()

void MSTL_API sleep_for_us ( uint64_t ms)
noexcept

精确睡眠指定微秒数

参数
ms要睡眠的微秒数

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

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

◆ sleep_until()

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

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

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

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

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

在文件 clocks.hpp176 行定义.

引用了 _THIS_THREAD , 以及 sleep_for().

◆ yield()

MSTL_ALWAYS_INLINE_INLINE void yield ( )
noexcept

让出当前线程的时间片

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

在文件 this_thread.hpp61 行定义.