21xrx.com
2024-12-22 20:41:11 Sunday
登录
文章检索 我的文章 写文章
C++创建线程的几种方式
2023-07-13 13:52:09 深夜i     --     --
C++ 线程 创建方式

C++是一种高效的编程语言,它允许多线程程序的执行。但是,C++创建线程的方式却有几种,我们需要选择合适的方式。

1. 使用pthread库创建线程

pthread是POSIX线程库的一部分,它可以在Unix和Linux系统中使用。我们可以使用pthread_create()函数来创建线程。

示例代码:


#include <pthread.h>

#include <iostream>

void* thread_function(void* arg) {

  std::cout << "Thread function is running.\n";

}

int main() {

  pthread_t thread_id;

  pthread_create(&thread_id, NULL, &thread_function, NULL);

  std::cout << "Main function is running.\n";

  pthread_join(thread_id, NULL);

  std::cout << "Thread joined.\n";

  return 0;

}

pthread_create()函数的第一个参数是一个指向pthread_t结构体的指针,可以用于存储线程ID。第二个参数是一个指向pthread_attr_t结构体的指针,它可以设置线程属性。如果不需要设置,请将其设置为NULL。第三个参数是一个指向函数的指针,它是线程执行的函数。最后一个参数是线程执行函数的参数,它可以是任何类型。

2. 使用C++11的std::thread创建线程

C++11添加了一个新的库std::thread,它使得创建和管理线程变得更加直接。我们可以使用std::thread类来创建线程。

示例代码:


#include <iostream>

#include <thread>

void thread_function() {

  std::cout << "Thread function is running.\n";

}

int main() {

  std::thread t(&thread_function);

  std::cout << "Main function is running.\n";

  t.join();

  std::cout << "Thread joined.\n";

  return 0;

}

std::thread类构造函数的第一个参数是一个指向函数的指针,它是线程执行的函数。之后的参数是线程执行函数的参数。在这个例子中,我们没有使用任何参数。

3. 使用C++11的std::async创建线程

C++11的std::async库也可以用于创建线程,它可以返回一个std::future对象,用于在将来获取异步计算的结果。

示例代码:


#include <iostream>

#include <future>

void thread_function() {

  std::cout << "Thread function is running.\n";

}

int main() {

  std::future<void> future = std::async(std::launch::async, &thread_function);

  std::cout << "Main function is running.\n";

  future.wait();

  std::cout << "Thread joined.\n";

  return 0;

}

std::async()函数的第一个参数是一个枚举值,它可以指定异步线程的启动选项。在这个例子中,我们使用std::launch::async选项来启动一个异步线程。之后的参数是一个指向函数的指针,它是线程执行的函数。在这个例子中,我们使用void作为返回类型。之后的参数是线程执行函数的参数。在这个例子中,我们没有使用任何参数。

总结

在C++中创建线程有多种方法,每种方法都有其优点和缺点。我们可以根据实际应用场景来选择适当的方法。无论使用哪种方法,我们都必须小心地管理线程,确保它们能够正确地协调工作并安全地终止。

  
  

评论区

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