C++11线程库的使用

C++11引入了一个新的线程库,可以通过头文件来包含相关的类和函数。下面是C++11线程库的一些基本用法:

1.创建线程

#include 
#include 

void myFunction()
{
    std::cout << "This is myFunction()" << std::endl;
}

int main()
{
    std::thread t(myFunction); // 创建一个新的线程,并在该线程中执行myFunction函数
    t.join();                  // 等待线程t执行完毕
    return 0;
}

运行结果:

This is myFunction()

2.传递参数给线程函数

#include 
#include 

void printMessage(const std::string &message)
{
    std::cout << "Message: " << message << std::endl;
}

int main()
{
    std::string message = "Hello, world!";
    std::thread t(printMessage, message); // 创建一个新的线程,并将message作为参数传递给printMessage函数
    t.join();                             // 等待线程t执行完毕
    return 0;
}

运行结果:

Message: Hello, world!

3.线程的运行状态和主线程的同步

#include 
#include 

void myFunction()
{
    std::this_thread::sleep_for(std::chrono::seconds(2)); // 休眠2秒
    std::cout << "This is myFunction()" << std::endl;
}

int main()
{
    std::thread t(myFunction);
    if (t.joinable())
    {
        std::cout << "Thread is running" << std::endl;
        t.join(); // 等待线程t执行完毕
    }
    std::cout << "Thread has completed" << std::endl;
    return 0;
}

运行结果:

Thread is running
This is myFunction()
Thread has completed

4.线程的并发执行

#include 
#include 

void printNumber(int num)
{
    for (int i = 0; i < num; i++)
    {
        std::cout << i << " ";
    }
    std::cout << "\n";
}

int main()
{
    std::thread t1(printNumber, 5); // 创建一个新的线程,并打印数字0到4
    std::thread t2(printNumber, 5); // 创建另一个新的线程,并打印数字0到4
    t1.join();                      // 等待线程t1执行完毕
    t2.join();                      // 等待线程t2执行完毕
    return 0;
}

运行结果:

00 1 2 3 4
 1 2 3 4

注意事项:

  • 在使用线程库时,需要确保程序正常退出前,所有线程已经执行完毕并调用了join函数。
  • C++11线程库提供了更多的功能,如互斥量、条件变量、原子操作等,用于实现线程间的同步和通信。可以通过、和头文件来包含相关的类和函数。

你可能感兴趣的:(并发,c++)