约 1386 字

约 7 分钟

#C 语言标准库函数 thrd_yield

/*********************************************
 * @brief 让出当前线程
 ********************************************/
void thrd_yield(void);

说明

让出当前线程,提示调度系统重新调度线程,以允许其它线程运行。

当前线程仍是可以运行的状态,重新调度时仍可能运行当前线程。

参数

无

返回值

无

#示例

#include <stdio.h>
#include <threads.h>
#include <time.h>

// 通过让出实现睡眠
void yield_sleep(int seconds)
{
    // 获取当前时间戳(秒)
    // 亚秒级时间被丢弃,因此休眠时间并不准确
    time_t start = time(NULL);

    do
    {
        thrd_yield();
    }
    while(time(NULL) - start < seconds);
}

int main(void)
{
    printf("开始时间: %s", ctime(&(time_t){time(NULL)}));

    // 睡眠
    yield_sleep(3);

    printf("结束时间: %s", ctime(&(time_t){time(NULL)}));
    
    return 0;
}

运行结果:

开始时间: Fri Aug 22 14:51:18 2025
结束时间: Fri Aug 22 14:51:21 2025

#推荐阅读

#参考标准

  • C17 standard (ISO/IEC 9899:2018):
    • 7.26.5.8 The thrd_yield function (p: 281)
  • C11 standard (ISO/IEC 9899:2011):
    • 7.26.5.8 The thrd_yield function (p: 385)

更新: 2025/10/25

作者: PlanC

创建: 2025/8/22