C++ 线程池28 Aug 2024 | 5 分钟阅读 线程池是线程的集合,每个线程都有一个特定的任务。因此,不同的线程会执行不同类型的作业。结果是,每个线程都专门处理不同的任务。一个线程负责执行一组特定的相似函数,而另一个线程执行一组不同的相同函数,这种模式会延续到其他线程。每个线程都应该专注于可比较的函数,因为不同的线程有不同的参数。 这个线程池必须在 C++ 中维护。C++ 需要一个库来生成和管理线程池。这很可能是因为有多种构建线程池的方法。因此,C++ 程序员必须根据需求设计线程池。 什么是线程?线程是通过创建线程类而创建的组件。在常见的实例化中,线程构造函数的第一个参数通常是顶层方法的名称。线程构造函数的其余输入是函数参数。一旦创建线程,函数就开始执行。C++ 的 main() 函数就是一个顶层函数。该全局作用域中的其他职责是顶层操作。main() 函数是一个不需要显式声明的线程,这与其他线程不同。 线程池应该具备哪些属性?线程池只是一组可以使用的线程。在 C++ 中,它可以表示为 std::thread 数组或 vector。<std::vectorstd::thread> 适合任何扩展。 在某个时刻,线程池中的每个线程都可能被分配一个作业。当工作线程被创建时,具体的作业是未知的。在 C++ 中,这意味着线程池中的一个线程
对于第一点,当前的 C++ 方法是利用头文件 <functional> (std::bind, std::function, 等) 提供的框架,并结合模板参数包。对于第二点,传统技术是在发布任务的同时实现回调函数;较新的 C++ 方法则涉及使用 std::packaged_task 和 std::future。对于第三点,对于不频繁的作业可以考虑 std::condition_variable,对于更频繁的任务可以考虑 std::this_thread::yield。对于第四点,可以通过将内部变量作为令牌的表示,并让每个工作线程定期检查该令牌来实现。 C++ 中的线程池需求与架构上一段解释的线程池设计很简单。它意味着线程池没有任何特殊需求。因此,我们可以假设
下面列表总结了我们执行所需的关键思想。
在 C++ 中实现线程池接下来看看实现以及代码上的一些关键点。
线程如何执行任务?在上面的线程池代码中,我们可以看到 _threads vector 中有 n_threads 个 std::jthread 项。但是,每个线程执行什么代码?简单来说,就是从队列中弹出并按需停止的逻辑。 使用线程池一个使用线程池显示递增整数的简单应用程序。它还提供线程 id,以确认每次计数确实是在不同的线程上处理的。 下一个主题C++ 中的 KMP 算法 |
排序算法是计算机科学和数据处理的基础工具。它们能够将数据元素按特定顺序排列,从而更轻松地高效地搜索、检索和分析信息。排序是各种应用程序中的基本操作,从数据库管理...
阅读 23 分钟
在编写 C++ 程序来检查数字是否为阿姆斯特朗数之前,让我们了解什么是阿姆斯特朗数。阿姆斯特朗数是一个等于其数字立方和的数字。例如 0、1、153、370、371 等。
阅读1分钟
能够整除另一个数且不产生余数的数被称为因子。例如,20 的因子是 1、2、4、5、10 和 20。例如 1. 头文件包含 C++ 标准库的输入输出流函数...
阅读 3 分钟
问题陈述:您会得到一个数组,您的任务是根据整数次数将数组旋转一步。旋转数组意味着将数组的第一个元素移动到数组的最后一个元素,以便第一个元素...
阅读 4 分钟
什么是 C++ STL?在 C++ 中,我们有 STL,也称为 Standard Template Library,它具有大量内置函数,我们可以通过导入库直接使用它们。同样,STL 中有一个 numeric 库,并且...
阅读 3 分钟
在本文中,您将了解 Stein 算法及其算法和示例。什么是 Stein 算法?Stein 算法是一种用于查找两个非负整数的最大公约数(也称为二进制 GCD 算法)的算法。Stein 算法使用减法、比较、...
阅读 4 分钟
在本文中,您将了解为什么全局变量在 C++ 中是邪恶的:全局变量在任何程序函数之外定义和声明。在程序的整个生命周期中,它们都保持其理想。在程序的执行过程中,它们是可用的。非 `const` 的全局变量...
阅读 3 分钟
本文旨在介绍 C++ 编程语言的标准模板库,其中我们已经看到了操作函数的用法。由于 C++ STL 浩瀚如海,本文讨论了一些关键函数,如 merge()、operator"="、sort()、unique()、...
阅读 3 分钟
当满足特定条件时,使用跳转语句来改变程序的流程。它在程序中使用,用于结束或继续循环或暂停函数的执行。C++ 有四种跳转语句:continue、break、return 和 goto。Continue:相反……
阅读 4 分钟
C++ 中的名称修饰和 extern "C" Java 和 C++ 编程语言都支持方法重载和函数重载,分别。函数重载就是拥有多个函数,这些函数通过参数数量的差异或数据...
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India