21xrx.com
2024-11-22 02:41:01 Friday
登录
文章检索 我的文章 写文章
C++多线程编程简介
2023-07-01 17:06:33 深夜i     --     --
C++ 多线程编程 简介

C++是一门广泛使用的编程语言,也是一门面向对象的编程语言。在C++编程中,多线程编程是非常重要的一个方面,它能够提高程序的性能,同时也能提高程序的可靠性和可维护性。在本文中,我们将对C++多线程编程进行简要介绍。

在C++中,多线程编程主要涉及到线程的创建、线程的同步、线程的销毁以及线程池的使用等方面。

1.线程创建

在C++中,线程的创建主要是通过std::thread类来完成。这个类有一个构造函数,可以接受一个可调用对象(可以是函数、函数指针、lambda表达式等),然后创建一个新线程来执行这个可调用对象。例如:


void myFunc()

  //线程要执行的代码

int main()

{

  std::thread t(myFunc); //创建一个新线程

  t.join(); //等待子线程结束

  return 0;

}

2.线程同步

在多线程编程中,线程之间的同步非常重要。C++提供了一些线程同步的机制,例如mutex、condition_variable、atomic等。这些机制能够保证多个线程之间的数据访问不会出现竞争问题。例如:


std::mutex mtx; //创建一个互斥量

int sharedData = 0; //一个共享资源

void myFunc()

{

  std::lock_guard lock(mtx); //加锁(获取互斥量)

  sharedData++; //修改共享资源

}

int main()

{

  std::thread t1(myFunc); //创建两个线程

  std::thread t2(myFunc);

  t1.join();

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

  return 0;

}

在上面的代码中,两个线程同时对共享资源sharedData进行修改。为了避免竞争问题,我们使用了一把互斥锁(mutex)来保证同时只有一个线程在修改。

3.线程销毁

当一个线程执行完毕之后,它需要被销毁。在C++中,线程的销毁主要是通过调用std::thread的析构函数来完成的。例如:


std::mutex mtx; //一个互斥量

bool isStop = false; //一个标志位

void myFunc()

{

  while(!isStop)

  {

    std::lock_guard lock(mtx); //加锁(获取互斥量)

    //执行一些操作

  }

}

int main()

{

  std::thread t(myFunc); //创建一个新线程

  //执行一些操作

  isStop = true; //修改标志位,通知线程退出循环

  t.join(); //等待子线程结束

  return 0;

}

在上面的代码中,线程myFunc需要在isStop变量为true时退出。我们使用了一个while循环来实现,同时也使用了互斥锁来保证共享资源的访问不会出现竞争问题。

4.线程池

线程池是一种用来管理线程的技术,它可以有效地控制线程的数量,从而提高程序的性能。在C++中,我们可以使用std::thread和std::async来实现线程池。例如:


#include <iostream>

#include <vector>

#include <thread>

#include <future>

#include <chrono>

int myFunc(int i)

{

  std::this_thread::sleep_for(std::chrono::milliseconds(1000)); //模拟长时间计算

  return i * i;

}

int main()

{

  std::vector<std::future<int>> futures;

  for(int i = 0; i < 10; i++)

  {

    futures.push_back(std::async(std::launch::async, myFunc, i)); //开启线程并添加到任务队列

  }

  for(auto& f : futures)

  {

    std::cout << "result: " << f.get() << std::endl; //获取线程结果并输出

  }

  return 0;

}

在上面的代码中,我们使用std::async来创建线程,并将其添加到任务队列中。然后使用std::future来获取线程的结果并输出。

总结:

C++是一门广泛使用的编程语言,也是一门面向对象的编程语言。在C++编程中,多线程编程是非常重要的一个方面,它能够提高程序的性能,同时也能提高程序的可靠性和可维护性。在本文中,我们介绍了C++多线程编程中的线程创建、线程同步、线程销毁以及线程池的使用等方面。希望可以给大家提供一些参考和帮助。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复