21xrx.com
2024-11-05 18:28:43 Tuesday
登录
文章检索 我的文章 写文章
C++多线程的创建方法
2023-07-05 09:15:34 深夜i     --     --
C++ 多线程 创建方法

C++作为一种流行的编程语言,经常用于开发多线程应用程序。多线程允许程序同时执行不同的任务,从而提高应用程序的运行效率。本文将介绍如何使用C++创建多线程。

C++支持两种多线程模型:原生线程和POSIX线程。其中,原生线程是C++11标准引入的新特性,POSIX线程是UNIX操作系统提供的标准线程库。

C++原生线程的创建方法如下:


#include <iostream>

#include <thread>

// 任务函数

void task(){

  std::cout << "Hello, world!\n";

}

int main(){

  // 创建线程对象

  std::thread t(task);

  // 等待线程结束

  t.join();

  return 0;

}

以上代码创建了一个新的线程,并将任务函数`task`作为线程执行的入口。`t.join()`等待线程执行结束后才继续执行主线程。如果不等待线程结束,程序会直接退出,导致子线程无法完成任务。

如果需要传递参数给线程执行的函数,可以使用函数对象或lambda表达式来实现。例如:


#include <iostream>

#include <thread>

// 任务函数对象

class Task{

public:

  void operator()(int i){

    std::cout << "Hello, world! " << i << "\n";

  }

};

int main(){

  // 创建线程对象

  Task task;

  std::thread t(task, 42);

  // 等待线程结束

  t.join();

  return 0;

}

以上代码创建了一个函数对象`Task`,并将这个函数对象作为线程执行的入口。`t.join()`等待线程执行结束后才继续执行主线程。线程执行的函数对象重载了取值运算符`()`,可以实现线程的参数传递。

C++ POSIX线程的创建方法与原生线程类似,只是使用的头文件和函数不同。例如:


#include <iostream>

#include <pthread.h>

// 任务函数

void* task(void* arg){

  int i = *(int*)arg;

  std::cout << "Hello, world! " << i << "\n";

  return nullptr;

}

int main(){

  // 创建线程

  pthread_t tid;

  int arg = 42;

  pthread_create(&tid, nullptr, task, &arg);

  // 等待线程结束

  pthread_join(tid, nullptr);

  return 0;

}

以上代码使用了POSIX线程库提供的函数,包括`pthread_t`线程ID结构体和`pthread_create`、`pthread_join`等线程操作函数。线程执行的入口函数需要使用`void*`类型,并将传递的参数通过指针进行转换。

综上所述,C++可以通过原生线程和POSIX线程来创建多线程应用程序。无论哪种方法,都需要注意线程的创建、入口函数的设置和参数传递、以及线程结束状态的处理。有了多线程的支持,可以使程序更加高效地运行,在处理大量数据和复杂计算等方面发挥其优势。

  
  

评论区

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