21xrx.com
2024-12-22 21:22:00 Sunday
登录
文章检索 我的文章 写文章
C++多线程实现方式
2023-07-05 07:13:22 深夜i     --     --
C++ 多线程 实现方式 并发 线程安全

C++是一种面向对象的编程语言,其中多线程编程是一种非常常见的实现方式。多线程编程可以让计算机同时执行多个任务,从而提高系统的性能和响应速度。C++中实现多线程的方式有很多种,下面就来介绍一些常见的实现方式。

1. 使用std::thread类

std::thread类是C++11标准库中提供的一个多线程类,可以使用它来创建多个线程。使用std::thread类需要包含 头文件,并且在创建线程时需要传入一个可调用对象(比如函数指针、函数对象等),这个可调用对象将会在新创建的线程中执行。

示例代码:


#include <iostream>

#include <thread>

void myfunc()

  std::cout << "Hello from thread!" << std::endl;

int main()

{

  std::thread t(myfunc);

  t.join();

  return 0;

}

在上面的代码中,我们使用了std::thread类创建了一个新的线程,并将执行的函数指定为myfunc函数。然后使用t.join()等待线程执行完毕。

2. 使用std::async函数

std::async函数是C++11标准库中提供的一个函数,可以用来启动一个异步任务,并返回一个std::future对象,可以通过该对象获得异步任务的执行结果。std::async函数可以和std::thread类一样用来创建多个线程,不过它更加灵活,可以指定线程的启动方式(异步启动或延迟启动)以及执行方式(使用同步或异步方式)。

示例代码:


#include <iostream>

#include <future>

void myfunc()

  std::cout << "Hello from async!" << std::endl;

int main()

{

  auto fut = std::async(std::launch::async, myfunc);

  fut.wait();

  return 0;

}

在上面的代码中,我们使用了std::async函数创建了一个新的线程,并将执行的函数指定为myfunc函数。然后我们使用fut.wait()等待异步任务执行完毕。

3. 使用pthread库

pthread是POSIX线程库的缩写,它是C++中的一种实现多线程的方式。pthread库可以在Linux/Unix系统下使用,需要包含 头文件。使用pthread库需要手动创建和管理线程,因此比较复杂。

示例代码:


#include <iostream>

#include <pthread.h>

void* myfunc(void*)

  std::cout << "Hello from pthread!" << std::endl;

  return nullptr;

int main()

{

  pthread_t tid;

  pthread_create(&tid, nullptr, myfunc, nullptr);

  pthread_join(tid, nullptr);

  return 0;

}

在上面的代码中,我们使用了pthread_create函数创建了一个新的线程,并将执行的函数指定为myfunc函数。然后我们使用pthread_join函数等待线程执行完毕。

总结

以上就是C++中实现多线程的一些常见方式。在选择实现多线程时,应当根据项目需求和开发经验选择合适的方式。如果是一些简单的多线程操作,使用std::thread或std::async函数会更加方便;如果需要更多的线程管理功能,可以选择pthread库。无论哪种方式,都应当注意线程的同步和互斥问题,避免出现数据竞争或死锁等问题。

  
  

评论区

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