【发布时间】: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