21xrx.com
2024-12-23 03:02:47 Monday
登录
文章检索 我的文章 写文章
C++多线程:thread
2023-07-10 08:46:04 深夜i     --     --
C++语言、并发编程、多线程操作、线程池、线程同步

C++是一种流行的编程语言,它支持多线程编程,这使得开发人员可以更高效地利用现代计算机上的多核处理能力。其中一个在C++11中引入的关键多线程工具是`std::thread`。

`std::thread`是一个对象,用于表示一个执行线程。创建`std::thread`对象时,需要传递一个可调用的函数,该函数将在新的线程上执行。可以在函数的参数列表中传递任意数量和类型的参数。例如:


void myFunction(int arg1, double arg2)

  // function body

std::thread t(myFunction, 42, 3.14);

上述代码将创建一个新线程,该线程将以`myFunction(42, 3.14)`作为其执行体。可以使用`join()`方法在主线程中等待新线程执行完毕,或者可以使用`detach()`方法使新线程成为守护线程。

`std::thread`的一个重要应用是并行处理。例如,可以创建多个线程并将一些工作任务分配给它们,以利用多核处理器的并行性能。下面是一个简单的示例,该示例使用两个线程并行计算两个矩阵的乘积:


const int n = 1000;

const int m = 2000;

const int k = 3000;

std::vector<std::vector<double>> A(n, std::vector<double>(m));

std::vector<std::vector<double>> B(m, std::vector<double>(k));

std::vector<std::vector<double>> C(n, std::vector<double>(k));

// initialize A and B here ...

std::thread t1([&]() {

  for (int i = 0; i < n/2; ++i) {

    for (int j = 0; j < k; ++j) {

      for (int s = 0; s < m; ++s) {

        C[i][j] += A[i][s] * B[s][j];

      }

    }

  }

});

    

std::thread t2([&]() {

  for (int i = n/2; i < n; ++i) {

    for (int j = 0; j < k; ++j) {

      for (int s = 0; s < m; ++s) {

        C[i][j] += A[i][s] * B[s][j];

      }

    }

  }

});

    

t1.join();

t2.join();

上述代码将矩阵分为两半,然后将每个任务分配给不同的线程。两个线程并行地计算了矩阵乘积,并将结果存储在C中。

除了`std::thread`之外,C++还提供了其他多线程工具,例如锁和条件变量。这些工具可以帮助开发人员确保多个线程之间正确地交互和共享数据,从而防止出现数据竞争和死锁等问题。

C++多线程是一项强大的技术,它可以大大提高程序的性能和响应能力。使用`std::thread`和其他多线程工具,开发人员可以轻松地利用现代计算机的多核处理能力并同时保证线程安全。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复
    相似文章