2011-05-01 29 views
2

我有一個多線程程序,其中兩個單獨的線程將調試輸出發送到std :: clog,並且輸出是散佈的。我想找到一種簡單的方法來強制輸出至少保持分開,除了輸出中的換行。這樣,調試輸出可以更容易解釋。在某些地方,我在輸出之前插入了睡眠(1),並在將輸出發送到堵塞之前將輸出收集到一個字符串中,以減少碰撞的可能性,但是我更喜歡更強大和更可靠的解決方案。簡單的方法來避免來自不同線程的堵塞碰撞?

有一種簡單的方法,以確保每個線程在同一時間寫一整行到std ::堵塞之前,其他線程可以得到,寫自己的輸出線?

回答

3

有沒有特別容易這樣做的方式,並有關於它在這裏的進一步討論:http://www.cplusplus.com/forum/general/27760/

的問題在一定程度上與創建一個新的AtomicStream那之前別的原子寫入整條生產線,解決了有流式傳輸(這是通過緩衝技巧完成的)。你需要提出一個類似的解決方案。對不起,非簡單的答案 - 線程同步將以某種方式進入您的解決方案。

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

0

呀,你lookign一個跨線程同步方法。這些通常在操作系統的API中可用,您也可以在Boost中找到一個。

1

你......不能。您正在同時寫入同一個流。在clog緩衝將有所幫助,但仍然沒有保證。除非你想同步你的線程的日誌記錄(對於你正在做的事情有點昂貴),也許你應該看看使用日誌工具而不是(這將允許你記錄說,針對不同事物的不同文件)。