C++并发学习笔记(3):线程管理

管理当前线程的主要API

函数名C++ 标准作用典型使用场景
std::this_thread::yieldC++11让出当前线程的处理器使用权,允许调度器运行其他线程。在多线程程序中避免忙等待,释放 CPU 给其他线程使用。
std::this_thread::get_idC++11获取当前线程的唯一标识符。用于调试、日志记录或识别线程。
std::this_thread::sleep_forC++11暂停当前线程的执行一段指定的时间。定时任务、控制任务执行频率,或等待资源准备好(非忙等待)。
std::this_thread::sleep_untilC++11暂停当前线程的执行,直到指定的时间点。用于精确的任务调度或同步操作,例如定时启动任务。

示例代码

下面的代码展示了如何使用这些 API:

#include <iostream>
#include <thread>
#include <chrono>

void exampleFunction() {
    // 获取当前线程 ID
    std::cout << "Thread ID: " << std::this_thread::get_id() << std::endl;

    // 暂停当前线程 1 秒
    std::this_thread::sleep_for(std::chrono::seconds(1));
    std::cout << "Resuming after 1 second." << std::endl;

    // 暂停当前线程到一个时间点
    auto wake_time = std::chrono::steady_clock::now() + std::chrono::seconds(2);
    std::this_thread::sleep_until(wake_time);
    std::cout << "Resuming after waiting until a specific time." << std::endl;

    // 让出处理器使用权
    std::this_thread::yield();
    std::cout << "Yielded processor time to other threads." << std::endl;
}

int main() {
    std::thread t(exampleFunction);
    t.join();
    return 0;
}

让出处理器使用权的使用场景

  • 避免忙等待:当线程需要等待某个条件时,通过 yield 可以减少对 CPU 的占用。
while (!condition_met()) {
    std::this_thread::yield();
}
  • 提高公平性:在多线程环境中,主动让出 CPU 可以让其他线程有机会执行,避免资源占用不均。
  • 多线程调试和优化:在需要显式控制线程行为的场景中,yield 提供了简单的方法来调整线程调度。

sleep_forsleep_until 的对比

  • std::this_thread::yield

    • 让出 CPU 使用权,但不会阻塞线程。
    • 当前线程会立即重新参与调度。
    • 适合短时间暂停。
  • std::this_thread::sleep_forsleep_until

    • 暂停线程指定时间,不再参与调度。
    • 当前线程会真正进入等待状态,释放 CPU。
    • 适合明确的延迟操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值