C++11 新特性:多线程支持概述

C++11 引入了对多线程的原生支持,这是一个重大的改进,使得众多开发者翘首以盼的并发编程成为 C++ 语言的一部分。

在 C++11 之前,开发者需要依赖于操作系统提供的 API 或第三方库来实现多线程。C++11 通过在标准库中添加了多线程支持,简化了多线程程序的编写,并提高了代码的可移植性和开发效率。

后续我会通过几篇文章介绍多线程支持的一些细节,当然也不是完全描述,毕竟要覆盖多线程的各个方面,足够写一本书了。

我目前写的这个系列,是想把 C++ 11/14/17/20/23 的新增特性挨个过一遍,让大家了解一下 C++ 的近些年的进展。

这个系列写完,大概得两三个月吧。之后针对在多个版本中持续迭代的特性,进行详细讲解。

再然后,介绍一些使用 C++ 新特性的开源项目。体验一下像写脚本语言一样写 C++ 的感觉。

闲话不多说,进入正题。以下是 C++11 在多线程方面增加的主要特性。

1. 线程管理

C++11 通过 <thread>头文件引入了std::thread类,使得创建和管理线程变得更加简单直接。

  • 创建线程:可以直接通过std::thread的构造函数创建线程,并指定线程开始执行的函数。
  • 线程等待:通过join()成员函数,可以等待线程完成执行。
  • 线程分离:detach()允许线程在后台运行,这意味着主线程可以继续执行而不必等待该线程结束。

2. 互斥量

  • std::mutex:用于管理对共享数据的互斥访问。std::mutex提供了锁定和解锁操作,确保同一时间只有一个线程可以访问特定的数据。
  • std::recursive_mutex:允许同一线程多次获取锁。
  • std::lock_guardstd::unique_lock:是互斥量的RAII(Resource Acquisition Is Initialization)封装,自动管理锁的生命周期,防止忘记释放锁。
  • std::timed_mutexstd::recursive_timed_mutex:提供了带超时的锁定操作。

3. 条件变量

  • std::condition_variable:用于线程间的同步,允许一个或多个线程等待某个条件成立。

4. promise 和 future

  • std::promisestd::future:允许从一个线程向另一个线程传递值(或异常)。std::promise可以设置一个值或异常,而std::future用于异步获取std::promise设置的值或异常。
  • std::async:启动一个异步任务,返回一个std::future对象,用于获取异步任务的结果。

5. 原子操作

  • std::atomic:提供了原子类型封装,用于实现无锁编程。原子操作是不可分割的操作,保证了在多线程环境下的安全执行。

示例代码

以下是一个简单的示例,展示了如何使用std::thread来创建一个新线程:

#include <iostream>
#include <thread>

void helloFunction() {
    std::cout << "Hello from thread!" << std::endl;
}

int main() {
    std::thread t(helloFunction); // 创建并启动线程
    t.join(); // 等待线程结束
    return 0;
}

这段代码创建了一个线程t,在这个线程上执行helloFunction函数。t.join()确保主线程等待t结束后再继续执行。

C++11 的多线程支持让编写并发和并行程序更加直接和安全。

有了这些特性,C++ 开发者解决复杂的并发问题时,不用在手动封装系统 API,在提高了程序性能的同时,也提高了开发效率。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值