【问题标题】:Asynchronous thread异步线程
【发布时间】:2018-05-31 07:43:26
【问题描述】:

我使用带有代码块和 gcc 7.2 的 Windows 10,我可以使用 c++11 或 c++14。如果可能没有外部库(提升)。 我有一个处理数亿个字段的程序。这是一个概念证明,所以我不需要花哨的错误处理。我需要简单和性能。这些字段映射到一个位缓冲区,可以达到 500MB 以上,我想将缓冲区的管理放在一个隔离的线程中。构造函数或初始化会创建一个向量,析构函数或结束函数会将缓冲区写入带有统计信息的磁盘,而将被调用数百万次的函数只会进行一些微积分并设置位。我需要从主程序异步调用该函数,并且不需要返回任何数据。只是为了设置位,如果有错误,我可以读取而不是处理结束时,如果这样做很复杂。主程序可以在访问相同函数的 2 或 4 个线程中复制。我感谢有关该函数的异步调用的指导。谢谢。

【问题讨论】:

  • 好吧 C++11 及更高版本支持std::thread
  • 我用过它,它工作正常。我怎样才能以某种方式调用异步,因为我不想阻塞主程序并且不需要回复主程序,所以我不想阻塞主程序并且不需要回复主程序?
  • 你可以参考这个答案:stackoverflow.com/questions/10890242/…
  • Like in the example 你的main() 启动任何n 个线程,但是如果你不想阻塞主线程,那么不要调用join()。同样main() 必须保持足够长的生命,所以你的线程不会被终止 --> 我认为 这是正确的,如果main() 结束,那么你的程序也会结束,无论你的线程是否仍在运行(快速测试可以验证这一点)。
  • 是的,没错,当main() 过早退出并且线程仍在运行时出现异常(因为我删除了join())。因此,如果您不想阻止main(),那么至少将joins 移动到main() 的最后以确保正确性,并让main() 在此之前做任何其他事情。

标签: c++ multithreading c++11 asynchronous


【解决方案1】:

对不起我的英语。问题是与线程通信数百万次而不阻塞主程序,并且当线程没有工作要做时不花费cpu。并且性能很好,因为程序代码很短,但运行次数很多。

【讨论】:

    猜你喜欢
    • 2021-11-22
    • 1970-01-01
    • 2020-07-08
    • 2010-09-08
    • 2022-01-16
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多