2011-05-01 55 views
2

我有一个多线程程序,其中两个单独的线程将调试输出发送到std :: clog,并且输出是散布的。我想找到一种简单的方法来强制输出至少保持分开,除了输出中的换行。这样,调试输出可以更容易解释。在某些地方,我在输出之前插入了睡眠(1),并在将输出发送到堵塞之前将输出收集到一个字符串中,以减少碰撞的可能性,但是我更喜欢更强大和更可靠的解决方案。简单的方法来避免来自不同线程的堵塞碰撞?

有一种简单的方法,以确保每个线程在同一时间写一整行到std ::堵塞之前,其他线程可以得到,写自己的输出线?

回答

3

有没有特别容易这样做的方式,并有关于它在这里的进一步讨论:http://www.cplusplus.com/forum/general/27760/

的问题在一定程度上与创建一个新的AtomicStream那之前别的原子写入整条生产线,解决了有流式传输(这是通过缓冲技巧完成的)。你需要提出一个类似的解决方案。对不起,非简单的答案 - 线程同步将以某种方式进入您的解决方案。

这可能是派生的,但如果你的std::clog重定向到一个文件,你也可以有多个线程多个文件。

0

呀,你lookign一个跨线程同步方法。这些通常在操作系统的API中可用,您也可以在Boost中找到一个。

1

你......不能。您正在同时写入同一个流。在clog缓冲将有所帮助,但仍然没有保证。除非你想同步你的线程的日志记录(对于你正在做的事情有点昂贵),也许你应该看看使用日志工具而不是(这将允许你记录说,针对不同事物的不同文件)。