21xrx.com
2024-12-22 21:25:38 Sunday
登录
文章检索 我的文章 写文章
C++中如何创建线程?
2023-07-07 09:33:17 深夜i     --     --
C++ 线程 创建

C++作为一门高级编程语言,可以实现许多功能。其中之一就是创建线程。在C++中,我们可以使用标准库中的thread头文件来创建线程。本文将阐述如何在C++中创建线程。

首先,我们需要包含thread头文件:


#include <thread>

创建线程的方法是创建一个线程对象,并将其初始化为想要执行的函数和参数。例如,以下是创建一个新线程并执行一个函数的示例:


#include <iostream>

#include <thread>

void myFunction()

{

  std::cout << "Hello from myFunction!\n";

}

int main()

{

  std::thread myThread(myFunction);

  myThread.join();

  std::cout << "Main thread is done!\n";

  return 0;

}

在这个例子中,我们创建了一个线程对象`myThread`,并将其初始化为执行函数`myFunction`。线程对象创建后,我们可以通过调用它的`join()`方法,以等待线程完成执行。

接下来,我们来看看如何向线程函数传递参数。可以使用lambda表达式来实现。


#include <iostream>

#include <thread>

void myFunction(int a, int b)

{

  std::cout << "a + b = " << a + b << "\n";

}

int main()

{

  int a = 5, b = 3;

  std::thread myThread([&]{ myFunction(a, b); });

  myThread.join();

  std::cout << "Main thread is done!\n";

  return 0;

}

在这个例子中,我们使用lambda表达式将参数传递给线程函数`myFunction`。注意,我们使用引用符`&`以便lambda表达式可以访问外部变量`a`和`b`。

最后,我们来看看如何使用多个线程。C++标准库中的`std::thread`提供了`hardware_concurrency()`函数,它可以告诉我们当前机器支持的并发线程数量。

以下是一个简单的示例,它创建多个线程并执行一些任务:


#include <iostream>

#include <thread>

void task(int i)

{

  std::cout << "Task " << i << " is starting...\n";

  std::this_thread::sleep_for(std::chrono::seconds(1)); // simulate some work

  std::cout << "Task " << i << " is done!\n";

}

int main()

{

  const int numThreads = std::thread::hardware_concurrency();

  std::cout << "This machine supports concurrency with " << numThreads << " threads\n";

  

  std::vector<std::thread> threads;

  for (int i = 0; i < numThreads; ++i) {

    threads.emplace_back(task, i);

  }

  for (auto& thread : threads) {

    thread.join();

  }

  

  std::cout << "All tasks are done!\n";

  return 0;

}

在这个例子中,我们首先通过调用`hardware_concurrency()`函数获取可以执行并发任务的线程数量。然后,我们创建一个包含多个线程的`vector`对象,并使用`emplace_back()`函数添加线程。最后,我们打印出所有线程完成后的消息。

总结来说,在C++中使用多线程可以通过std::thread标准库来实现。创建线程可以通过初始化std::thread对象并传递线程函数进行实现。可以使用lambda表达式来更好的实现传统函数的参数传递,而std::thread中的hardware_concurrency则可以获取当前机器可以并行执行的线程数量。

  
  

评论区

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