摘要:
条件变量是用于线程间同步的一种机制,它允许一个或多个线程在某个条件满足之前等待,并在条件满足时通知等待的线程继续执行。以下是条件变量的基本使用方法,包括 notify_one 和 notify_all 的作用。 使用条件变量的基本步骤 创建条件变量和互斥量:首先需要创建一个 std::conditi 阅读全文
摘要:
线程池是一种用于管理和复用线程的技术,主要目的是提高系统性能和资源利用率。 它通过预先创建一定数量的线程,并将它们保存在线程池中,当需要执行任务时,从线程池中获取一个空闲的线程来执行任务,而不是每次都创建新的线程¹²。 线程池的工作原理 线程池初始化:在应用程序启动时,线程池会创建一定数量的线程,这 阅读全文
摘要:
std::packaged_task 概述 std::packaged_task 是 C++11 引入的标准库模板类,用于包装一个可调用对象(如函数、lambda 表达式、函数对象等),使其能够与 std::future 协同工作。 简单来说,它将一个任务(可调用对象)包装起来,并允许你获取该任务的 阅读全文
摘要:
std::future 相比于直接使用线程在 C++ 中有几个重要的优势,主要体现在同步结果获取、简化代码管理、以及更安全的异步任务管理等方面。以下是 std::future 的一些主要优势: 1. 自动结果获取与同步 std::future 提供了一种便捷的机制来获取异步任务的返回值。当我们使用线 阅读全文
摘要:
std::make_shared 是 C++11 引入的一个标准库函数,用于创建一个 std::shared_ptr,并在堆上分配所需的对象。 它的功能是将对象的创建和 shared_ptr 的初始化合并在一起,提高了效率和安全性。 使用方法: auto ptr = std::make_shared 阅读全文
摘要:
在C++中的可变模板参数使用省略号 ... 来表示一个参数包(Parameter Pack),其具体位置决定了这个包是模板参数包还是函数参数包,以及如何进行参数展开。 1. 模板参数包:c... Args 省略号放在类型名称的右边,用来表示模板参数包,即可以接受任意数量的模板类型参数。 templa 阅读全文
摘要:
在C++模板编程中,完美转发(Perfect Forwarding)是一种技术,旨在保留函数参数的值类别,即在将参数传递到另一个函数时,无论参数是左值还是右值,都能够保持它的原始性质,而不会因为转发丢失性能或引入不必要的拷贝。 完美转发的关键在于通过模板的转发引用(Forwarding Refere 阅读全文