C++ 来自多个boost线程的流写操作-g++;和vs2008
使用boost线程库,我将openofstream文件作为引用传递给每个线程,在一半线程写入后,会出现某种崩溃,程序终止。我的假设是,函数到达末尾,关闭文件,其余线程正试图写入一个关闭的文件。作为测试,我为最后一个线程和更多管理写入文件的线程添加了join语句。我的经验是2天-昨天我得到了升压库,没有更多的经验在C++或任何语言。 我通读了“可能已经有你答案的问题”,但没有人回答这个问题。有很多帖子都在讨论这个问题的版本,解决这个问题的方法也一样多——这更像是过度思考,有一种干净的方法可以确保所有线程在文件关闭之前都已完成,并且每个线程的写入都在队列中缓冲,以防止写入冲突 一些可能的解决办法:C++ 来自多个boost线程的流写操作-g++;和vs2008,c++,boost-thread,ofstream,C++,Boost Thread,Ofstream,使用boost线程库,我将openofstream文件作为引用传递给每个线程,在一半线程写入后,会出现某种崩溃,程序终止。我的假设是,函数到达末尾,关闭文件,其余线程正试图写入一个关闭的文件。作为测试,我为最后一个线程和更多管理写入文件的线程添加了join语句。我的经验是2天-昨天我得到了升压库,没有更多的经验在C++或任何语言。 我通读了“可能已经有你答案的问题”,但没有人回答这个问题。有很多帖子都在讨论这个问题的版本,解决这个问题的方法也一样多——这更像是过度思考,有一种干净的方法可以确保所
- 与其传递打开的文件,不如传递文件引用并让每个
线程打开文件,追加,然后关闭流myfile(“数据库”)的
, ios::out | ios::app)代码>-来自此发布的解决方案;这不起作用
- 通过阅读,有一个
函数,但在vs2008中从boost 1.53.0编译而来 版本,join_all()
“错误C2039:“全部加入”:不是的成员 “boost::thread”
- 这个解释似乎是正确的 asnwer,但我首先想知道这次坠机是否是由于多重原因造成的 写入冲突或文件在线程停止之前关闭 写完了
- 这引用了多线程,但只是 声明没有任何保证
- 关于
与其他功能不同,只是查看boost::线程和 boost::function
文献没有帮助解释评论内容 意味着boost::function
- 返回到等待所有线程完成是否有问题
而不是写冲突,那
需要存储所有线程,并调用
join()
- 特定于windows的
但是 这是特定于windows的-这篇文章中的最后一个解决方案听起来像 答案是肯定的,但它没有投票权,我也说不出它是不是windows 具体与否WaitForMultipleObjects
- 并在一个单独的函数中写出——这个解决方案是用C#编写的,但这种方法似乎是可行的。他们讨论的细节对我来说没有意义
- -似乎有最清晰的审查;使用此线程中给出的
方法解决boost::thread\u group
- 有更多的论坛讨论,但它们听起来像以前例子的更多版本
我想要一个在windows和linux下都能工作的解决方案;我的直觉是传递文件引用并让每个线程附加到文件中。在多个线程向同一个流进行不协调的写入之后,您希望看到什么结果?那终究是垃圾,即使这条小溪在这场折磨中幸存了下来。。。您将需要在写入之间实现某种协调。是的,这是我所期望的,也是大多数解决方案所解决的问题,但在崩溃之外,从多个线程写入文件的数据是正确的——这一点很幸运;我想ofstream可能会使用内置的缓冲区函数序列化写操作。这是可能的,但不太可能。无论如何,这不是规范的一部分,我不会依赖它。