关键词

线程 创建 管理

在C++中创建和管理线程

在C++中,可以使用多线程来提高程序的执行效率。多线程程序可以把一个任务拆分成多个子任务,在多个线程中同时处理,从而提高程序的执行效率。在C++中,可以使用std::thread类来创建和管理线程。

1. 创建线程

要创建线程,可以使用std::thread类的构造函数,构造函数有两种形式:

  • std::thread t1(函数名);
  • std::thread t2(函数名,参数1,参数2,...);

第一种形式用于创建一个线程,线程执行的函数不带参数;第二种形式用于创建一个线程,线程执行的函数带参数。

#include <thread>
#include <iostream>

// 线程函数,不带参数
void threadFunc1()
{
    std::cout << "threadFunc1" << std::endl;
}

// 线程函数,带参数
void threadFunc2(int x, int y)
{
    std::cout << "threadFunc2: x + y = " << x + y << std::endl;
}

int main()
{
    // 创建线程t1,执行threadFunc1函数
    std::thread t1(threadFunc1);

    // 创建线程t2,执行threadFunc2函数,带参数
    std::thread t2(threadFunc2, 1, 2);

    // 等待线程t1和t2结束
    t1.join();
    t2.join();

    return 0;
}

2. 管理线程

线程在创建后,可以使用std::thread类的成员函数来管理线程。

  • join(): 等待线程结束,等待线程结束后,继续执行主线程。
  • detach(): 分离线程,线程结束后,不需要等待,继续执行主线程。
  • get_id(): 获取线程id。
  • native_handle(): 获取系统线程句柄。
  • swap(): 交换两个线程的资源。

还可以使用std::this_thread命名空间中的函数来管理线程。

  • sleep_for(): 线程休眠指定时间。
  • sleep_until(): 线程休眠到指定时间。
  • get_id(): 获取当前线程id。
  • yield(): 放弃当前线程资源,让出CPU时间片。
#include <thread>
#include <iostream>
#include <chrono>

// 线程函数
void threadFunc()
{
    std::cout << "threadFunc: thread id = " << std::this_thread::get_id() << std::endl;
    std::this_thread::sleep_for(std::chrono::seconds(1));
    std::this_thread::yield();
}

int main()
{
    std::cout << "main: thread id = " << std::this_thread::get_id() << std::endl;

    std::thread t(threadFunc);
    t.join();

    return 0;
}

本文链接:http://task.lmcjl.com/news/12224.html

展开阅读全文