线程池 C++

2024-02-16

我有以下内容for loop:

for (int i = 0; i < 100; i++) {
    someJob();
}

我只想用 5 个线程运行这个函数,我该怎么做?
我无法使用任何外部库。

我尝试过创建一个包含 5 个线程的数组,如果索引等于 5,则等待所有线程并再次执行此操作,但我确信还有另一种方法可以做到这一点:

std::thread t[THREAD_COUNT];
int j=0;

for (int i = 0; i < 100; i++) {
    t[j++] = std::thread(someJob);
    if (j == THREAD_COUNT)
    {
        for (int k = 0; k < THREAD_COUNT; k++)
        {
            if (t[k].joinable())
                t[k].join();
        }
        j = 0;
    }
}

有什么建议吗? (我无法使用增强)

Thanks!


您可以创建一个函数来测试您的线程数组,以找到一个空闲线程来运行每个连续的作业。像这样的事情:

// synchronized output to prevent interleaving of results
#define sync_out(m) do{std::ostringstream o; o << m << '\n'; std::cout << o.str();}while(0)

void someJob(int id)
{
    sync_out("thread: " << id);
}

template<typename Job>
void start_thread(std::vector<std::thread>& threads, Job&& job)
{
    // find an ended thread
    for(auto&& thread: threads)
    {
        if(thread.joinable()) // still running or waiting to join
            continue;

        thread = std::thread(job);
        return;
    }

    // if not wait for one
    for(auto&& thread: threads)
    {
        if(!thread.joinable()) // dead thread (not run or already joined)
            continue;

        thread.join();
        thread = std::thread(job);
        return;
    }
}

int main()
{

    std::vector<std::thread> threads(5); // 5 threads

    for(int i = 0; i < 100; i++)
        start_thread(threads, [=]{someJob(i);});

    // wait for any unfinished threads    
    for(auto&& thread: threads)
        if(thread.joinable())
            thread.join();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

线程池 C++ 的相关文章

  • VB.NET 相当于 C# 属性简写吗?

    是否有与 C 等效的 VB NET public string FirstName get set 我知道你能做到 Public Property name As String Get Return name ToString End Ge
  • std::cout 和 std::wcout 有什么区别?

    在c 中 有什么区别std cout and std wcout 它们都控制流缓冲区的输出或将内容打印到控制台 或者它们只是相似吗 它们作用于不同的字符类型 std cout uses char作为字符类型 std wcout uses w
  • Unix网络编程澄清

    我正在翻阅这本经典书籍Unix网络编程 https rads stackoverflow com amzn click com 0139498761 当我偶然发现这个程序时 第 6 8 节 第 179 180 页 include unp h
  • 如何检查QProcess是否正确执行?

    QProcess process sdcompare QString command sdcompare QStringList args sdcompare command sdcompare diff args sdcompare lt
  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 如何为 C 分配的 numpy 数组注册析构函数?

    我想在 C C 中为 numpy 数组分配数字 并将它们作为 numpy 数组传递给 python 我可以做的PyArray SimpleNewFromData http docs scipy org doc numpy reference
  • 如何将 #ifdef DEBUG 添加到 Xcode?

    我的项目中有一些代码永远不应该在发布版本中使用 但在测试时很有用 我想做这样的事情 ifdef DEBUG Run my debugging only code endif 在 Xcode 4 中哪里添加 DEBUG 设置 我尝试将其放入
  • 将内置类型转换为向量

    我的 TcpClient 类接受vector
  • 如何从 .resx 文件条目获取注释

    资源文件中的字符串有名称 值和注释 The ResXResourceReader类让我可以访问名称和值 有办法看评论吗 你应该能够得到Comment via ResXDataNode class http msdn microsoft co
  • C++中的类查找结构体数组

    我正在尝试创建一个结构数组 它将输入字符串链接到类 如下所示 struct string command CommandPath cPath cPathLookup set an alarm AlarmCommandPath send an
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • 读写器的信号量解决方案:更新读取器计数和等待或发出读/写二进制信号量信号之间的顺序?

    从操作系统概念来看 在解决第一个读者 作者问题时 读者 进程共享以下数据结构 semaphore rw mutex 1 semaphore mutex 1 int read count 0 do wait rw mutex writing
  • C++:.bmp 到文件中的字节数组

    是的 我已经解决了与此相关的其他问题 但我发现它们没有太大帮助 他们提供了一些帮助 但我仍然有点困惑 所以这是我需要做的 我们有一个 132x65 的屏幕 我有一个 132x65 的 bmp 我想遍历 bmp 并将其分成小的 1x8 列以获
  • Python 队列 get()/task_done() 问题

    我的消费者端队列 m queue get queue task done
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • (de)从 CSV 序列化为对象(或者最好是类型对象的列表)

    我是一名 C 程序员 试图学习 C 似乎有一些内置的对象序列化 但我在这里有点不知所措 我被要求将测试数据从 CSV 文件加载到对象集合中 CSV 比 xml 更受青睐 因为它更简单且更易于人类阅读 我们正在创建测试数据来运行单元测试 该集
  • C++ 密码屏蔽

    我正在编写一个代码来接收密码输入 下面是我的代码 程序运行良好 但问题是除了数字和字母字符之外的其他键也被读取 例如删除 插入等 我知道如何避免它吗 特q string pw char c while c 13 Loop until Ent
  • 编译时“strlen()”有效吗?

    有时需要将字符串的长度与常量进行比较 例如 if line length gt 2 Do something 但我试图避免在代码中使用 魔法 常量 通常我使用这样的代码 if line length gt strlen Do somethi

随机推荐

  • 如何使用@DbRef注释引用GridFSFile(spring data mongodb)

    我有一个春天 Documentobject Profile 我想像这样引用 GridFSFile DbRef private GridFSFile file 该文件被写入另一个集合类型GridFS 我总是有一个java lang Stack
  • GridView 自动将行高设置为最高的网格项

    标题是我想要实现的目标的简化版本 一个 GridView 它根据我提供的原型网格项自动设置行高 原型项目是最高的可能项目 例如 如果网格项目包含文本 则原型将包含最长的可能文本 一种可能的解决方法是使用 ListView 其中每一行都包含在
  • ctypes 指向 numpy 数组中间的指针

    我知道如何获取指向 numpy 数组开头的 ctypes 指针 a np arange 10000 dtype np double p a ctypes data as POINTER c double p contents c doubl
  • keras 规范化轴参数有什么作用?

    我是深度学习的初学者 正在 keras 中处理 mnist 数据集 我使用归一化作为 tf keras utils normalize x train axis 1 我不明白轴参数是什么意思 你能帮我解决这个问题吗 Normalize 函数
  • 如何使用 pyspark 计算 apache Spark 数据帧的大小?

    有没有办法使用 pyspark 计算 Apache Spark 数据帧的大小 以字节为单位 为什么不缓存 df 然后在存储下查看 Spark UI 并将单位转换为字节 df cache
  • Google Drive Api - 使用实体框架自定义 IDataStore

    我实现了我的自定义IDataStore这样我就可以存储最终用户令牌 on my database而不是默认的实现 它保存在文件系统在 AppData 内 public class GoogleIDataStore IDataStore pu
  • 在没有脚本标签的情况下执行 XSS JavaScript

    我正在学习 XSS 出于道德目的 我想知道如何在不使用
  • AngularJS:使用 ng-repeat 保留插入顺序

    我正在使用 ng repeat 实现自动完成系统 基本上 我有一个提供 ng repeat 的对象数组 我注意到 当我将新内容插入数组时 插入顺序不会保留 例如 广告订单 A B C ng 重复渲染顺序 甲 丙 乙 A B C 中的每一个都
  • 如何在 LINQ 中选择所有字段以及一些新字段?

    我收到了 RDLC 报告 SQL DB 中存储的日期格式是格鲁吉亚语 我想在报告中将日期显示为波斯语 使用 Linq 我想选择数据库的所有字段以及一些用作波斯日期字段的新字段 我使用以下语法 var invoices from invoic
  • 如何用Vagrant处理Mysql、网站源等数据?

    如何使用 Vagrant 处理 Mysql 网站源等数据 作为一名程序员 我喜欢能够轻松设置开发环境 因此 我创建了一个流浪盒子并为其配置了木偶 但我问自己 盒子中的数据怎么样 如果我需要销毁盒子并重新创建它会怎样 我的所有数据都将被删除
  • Chrome 中的引导模式问题

    我的 asp net mvc 代码中有一个引导模式 它在运行时进行主体绑定 第一次我单击某些按钮并且模态工作良好 通过 jquery ajax 从控制器返回主体 然后必须动态改变模型的主体 它也很好用 通过 jquery Ajax 和 js
  • 如何实现以下C++输出格式?

    我希望按照以下规则打印出 double 1 No scietific notation 2 Maximum decimal point is 3 3 No trailing 0 例如 0 01 formated to 0 01 2 1234
  • 在 Android 上使用 firebase 发送好友请求

    我正在从 Parse 迁移到 Firebase 我的 sendRequest 函数执行以下任务 假设user1向user2发送请求 检查用户名是否存在 检查user1是否尚未向user2发送请求 检查user1和user2是否还不是朋友 一
  • Jenkins Pipeline - 阅读前一阶段日志

    考虑一个有两个阶段的 Jenkins Pipeline Stage A then Stage B 在阶段 B 中 是否可以解析阶段 A 的日志中的某些特定文本 Use tee将输出拆分为标准输出和文件 接下来解析文件中的文本 STAGE A
  • 如何使用Microsoft Graph Client SDK(C#)重置密码?

    用户如何使用 Microsoft Graph 客户端重置密码 我无法找到正确的方法来做到这一点 谢谢 汤姆关于委托范围的说法是正确的Directory AccessAsUser All允许登录用户更改密码 标准User ReadWrite可
  • 将字典列表转换为 tf 数据集

    我有一本已经完全预处理的字典 可以输入到 BERT 模型中 然而 我很难将其放入 tf dataset 中 这就是我的数据集的一个元素 print dataset 0 input ids
  • Tensorflow:tf.nn.separable_conv2d 是做什么的?

    我不太确定 tf nn separable conv2d 到底做了什么 看来pointwise filter是生成下一层的一个像素时针对不同特征的缩放因子 但我不确定我的解释是否正确 这个方法有什么参考吗 有什么好处 tf nn separ
  • 在新的 @material-ui/core 中使用 withStyles 和 Typescript

    我正在尝试将一些使用material ui next的旧Typescript更新为新的 material ui core Typescript Version 2 8 3 material ui core 1 1 0 我已经实现了一个非常简
  • 需要在 Angular 2 中使用 youtube-iframe-api 的 youtube.d.ts 文件

    我尝试使用YouTube iframe API https developers google com youtube iframe api reference hl de用于通过平滑的 Angular2 集成来显示和控制视频片段 尊重 t
  • 线程池 C++

    我有以下内容for loop for int i 0 i lt 100 i someJob 我只想用 5 个线程运行这个函数 我该怎么做 我无法使用任何外部库 我尝试过创建一个包含 5 个线程的数组 如果索引等于 5 则等待所有线程并再次执