Android常用C++特性之std::this_thread-std::this_thread::yield

  • 让出当前线程的执行权,允许其他线程获得 CPU 时间。使用 yield() 时,当前线程会被挂起,等待系统调度其他线程,之后可能会再次执行该线程。
  • 在多线程环境中,当线程没有重要任务处理时,可以使用 yield() 让出 CPU,以提高其他线程的响应性。
#include <iostream>
#include <thread>

void task() {
    for (int i = 0; i < 5; ++i) {
        std::cout << "Task executing, iteration " << i << std::endl;
        std::this_thread::yield();  // 让出CPU,让其他线程执行
    }
}

int main() {
    std::thread t1(task);
    std::thread t2(task);

    t1.join();
    t2.join();
    return 0;
}

std::this_thread 常见用途

  • 线程调试get_id() 可以用来打印和识别不同线程的身份,尤其在调试多线程程序时可以更方便地追踪问题。
  • 线程同步sleep_for()sleep_until() 用于在某些场景中强制同步,例如模拟异步操作的延迟、让线程等待某个特定的时间点。
  • 线程调度yield() 让当前线程暂时让出 CPU 控制权,以便其他等待的线程能够运行,常用于避免忙等待或在某些竞争条件下提高效率。

示例:多线程与休眠

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

void threadTask(int id) {
    std::cout << "Thread " << id << " starting..." << std::endl;
    std::this_thread::sleep_for(std::chrono::seconds(id));  // 每个线程休眠不同时间
    std::cout << "Thread " << id << " finished!" << std::endl;
}

int main() {
    std::thread t1(threadTask, 1);
    std::thread t2(threadTask, 2);
    std::thread t3(threadTask, 3);

    t1.join();
    t2.join();
    t3.join();

    return 0;
}

输出:

Thread 1 starting...
Thread 2 starting...
Thread 3 starting...
Thread 1 finished!
Thread 2 finished!
Thread 3 finished!

每个线程按照指定的时间休眠并完成工作。

总结

  • std::this_thread::get_id():获取当前线程的唯一 ID。
  • std::this_thread::sleep_for():让当前线程暂停执行指定时长。
  • std::this_thread::sleep_until():让当前线程暂停执行,直到指定的时间点。
  • std::this_thread::yield():让出当前线程的 CPU 时间片,允许其他线程运行。

通过 std::this_thread,可以灵活地控制当前线程的行为,尤其在多线程编程中,能有效地控制线程的执行顺序和时机。

上一篇:iOS 消息机制详解


下一篇:第九章:NAT技术