摘要: 线程池是一种用于管理和复用线程的技术,主要目的是提高系统性能和资源利用率。 它通过预先创建一定数量的线程,并将它们保存在线程池中,当需要执行任务时,从线程池中获取一个空闲的线程来执行任务,而不是每次都创建新的线程¹²。 线程池的工作原理 线程池初始化:在应用程序启动时,线程池会创建一定数量的线程,这 阅读全文
posted @ 2024-10-07 19:55 牛马chen 阅读(111) 评论(0) 推荐(0) 编辑
摘要: std::packaged_task 概述 std::packaged_task 是 C++11 引入的标准库模板类,用于包装一个可调用对象(如函数、lambda 表达式、函数对象等),使其能够与 std::future 协同工作。 简单来说,它将一个任务(可调用对象)包装起来,并允许你获取该任务的 阅读全文
posted @ 2024-10-07 12:03 牛马chen 阅读(76) 评论(0) 推荐(0) 编辑
摘要: std::future 相比于直接使用线程在 C++ 中有几个重要的优势,主要体现在同步结果获取、简化代码管理、以及更安全的异步任务管理等方面。以下是 std::future 的一些主要优势: 1. 自动结果获取与同步 std::future 提供了一种便捷的机制来获取异步任务的返回值。当我们使用线 阅读全文
posted @ 2024-10-07 11:58 牛马chen 阅读(266) 评论(0) 推荐(5) 编辑
摘要: std::make_shared 是 C++11 引入的一个标准库函数,用于创建一个 std::shared_ptr,并在堆上分配所需的对象。 它的功能是将对象的创建和 shared_ptr 的初始化合并在一起,提高了效率和安全性。 使用方法: auto ptr = std::make_shared 阅读全文
posted @ 2024-10-07 11:54 牛马chen 阅读(478) 评论(0) 推荐(1) 编辑
摘要: 在C++中的可变模板参数使用省略号 ... 来表示一个参数包(Parameter Pack),其具体位置决定了这个包是模板参数包还是函数参数包,以及如何进行参数展开。 1. 模板参数包:c... Args 省略号放在类型名称的右边,用来表示模板参数包,即可以接受任意数量的模板类型参数。 templa 阅读全文
posted @ 2024-10-07 11:37 牛马chen 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 在C++模板编程中,完美转发(Perfect Forwarding)是一种技术,旨在保留函数参数的值类别,即在将参数传递到另一个函数时,无论参数是左值还是右值,都能够保持它的原始性质,而不会因为转发丢失性能或引入不必要的拷贝。 完美转发的关键在于通过模板的转发引用(Forwarding Refere 阅读全文
posted @ 2024-10-07 11:18 牛马chen 阅读(14) 评论(0) 推荐(0) 编辑
摘要: 在并发编程中,读写场景和生产者消费者场景是非常经典的两种问题。它们的基本思路和实现方法在许多应用中都可以找到。下面分别介绍这两种场景的一些经典问题及其解决方案。 读写场景 经典问题 多线程访问共享资源: 多个线程需要同时读取某个共享数据(例如,配置文件、缓存等),但在某个线程需要写入时,其他线程必须 阅读全文
posted @ 2024-10-06 20:01 牛马chen 阅读(15) 评论(0) 推荐(0) 编辑
摘要: 读写锁是一种特殊的锁机制,允许多个线程同时读取共享数据,但在写入共享数据时,只有一个线程可以进行写操作,其他线程必须等待。 这种机制对于读多写少的场景非常有效,可以提高并发性能。以下是通过 shared_lock、unique_lock、shared_mutex 和 mutex 的解释来说明读写锁的 阅读全文
posted @ 2024-10-06 18:22 牛马chen 阅读(38) 评论(0) 推荐(0) 编辑
摘要: 标准库中的 std::queue 不是线程安全的。 这意味着在多线程环境中,多个线程同时对 std::queue 进行读写操作时,可能会导致数据竞争(data race)和未定义行为。下面是详细的解释: 原因 数据竞争: 当多个线程同时对 std::queue 进行操作(如 push、pop 等), 阅读全文
posted @ 2024-10-06 18:18 牛马chen 阅读(9) 评论(0) 推荐(0) 编辑
摘要: std::unique_lock 是 C++11 标准库中的一个类,提供了一种灵活的方式来管理互斥量(mutex)。 它比 std::lock_guard 更加灵活,允许在不同的作用域和不同的锁定策略之间进行选择。以下是对 unique_lock 的详细解释,包括其用途、使用方法和优点。 1. 定义 阅读全文
posted @ 2024-10-06 18:06 牛马chen 阅读(212) 评论(0) 推荐(0) 编辑