Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 来自多个boost线程的流写操作-g++;和vs2008_C++_Boost Thread_Ofstream - Fatal编程技术网

C++ 来自多个boost线程的流写操作-g++;和vs2008

C++ 来自多个boost线程的流写操作-g++;和vs2008,c++,boost-thread,ofstream,C++,Boost Thread,Ofstream,使用boost线程库,我将openofstream文件作为引用传递给每个线程,在一半线程写入后,会出现某种崩溃,程序终止。我的假设是,函数到达末尾,关闭文件,其余线程正试图写入一个关闭的文件。作为测试,我为最后一个线程和更多管理写入文件的线程添加了join语句。我的经验是2天-昨天我得到了升压库,没有更多的经验在C++或任何语言。 我通读了“可能已经有你答案的问题”,但没有人回答这个问题。有很多帖子都在讨论这个问题的版本,解决这个问题的方法也一样多——这更像是过度思考,有一种干净的方法可以确保所

使用boost线程库,我将openofstream文件作为引用传递给每个线程,在一半线程写入后,会出现某种崩溃,程序终止。我的假设是,函数到达末尾,关闭文件,其余线程正试图写入一个关闭的文件。作为测试,我为最后一个线程和更多管理写入文件的线程添加了join语句。我的经验是2天-昨天我得到了升压库,没有更多的经验在C++或任何语言。 我通读了“可能已经有你答案的问题”,但没有人回答这个问题。有很多帖子都在讨论这个问题的版本,解决这个问题的方法也一样多——这更像是过度思考,有一种干净的方法可以确保所有线程在文件关闭之前都已完成,并且每个线程的写入都在队列中缓冲,以防止写入冲突

一些可能的解决办法:

  • 与其传递打开的文件,不如传递文件引用并让每个 线程打开文件,追加,然后关闭流myfile(“数据库”)的
    ,
    ios::out | ios::app)-来自此发布的解决方案;这不起作用

  • 通过阅读,有一个
    join_all()
    函数,但在vs2008中从boost 1.53.0编译而来 版本,
    “错误C2039:“全部加入”:不是的成员
    “boost::thread”

  • 这个解释似乎是正确的 asnwer,但我首先想知道这次坠机是否是由于多重原因造成的 写入冲突或文件在线程停止之前关闭 写完了

  • 这引用了多线程,但只是 声明没有任何保证

  • 关于
    boost::线程和
    boost::function
    与其他功能不同,只是查看
    boost::function
    文献没有帮助解释评论内容 意味着

  • 返回到等待所有线程完成是否有问题 而不是写冲突,那 需要存储所有线程,并调用
    join()

  • 特定于windows的
    WaitForMultipleObjects
    但是 这是特定于windows的-这篇文章中的最后一个解决方案听起来像 答案是肯定的,但它没有投票权,我也说不出它是不是windows 具体与否

  • 并在一个单独的函数中写出——这个解决方案是用C#编写的,但这种方法似乎是可行的。他们讨论的细节对我来说没有意义

  • -似乎有最清晰的审查;使用此线程中给出的
    boost::thread\u group
    方法解决

  • 有更多的论坛讨论,但它们听起来像以前例子的更多版本


我想要一个在windows和linux下都能工作的解决方案;我的直觉是传递文件引用并让每个线程附加到文件中。

在多个线程向同一个流进行不协调的写入之后,您希望看到什么结果?那终究是垃圾,即使这条小溪在这场折磨中幸存了下来。。。您将需要在写入之间实现某种协调。

是的,这是我所期望的,也是大多数解决方案所解决的问题,但在崩溃之外,从多个线程写入文件的数据是正确的——这一点很幸运;我想ofstream可能会使用内置的缓冲区函数序列化写操作。这是可能的,但不太可能。无论如何,这不是规范的一部分,我不会依赖它。