我有OpenMP線程通過cout和cerr寫入控制檯。這當然是不安全的,因爲輸出可以交錯。我可以做類似多個線程寫入std :: cout或std :: cerr
#pragma omp critical(cerr)
{
cerr << "my variable: " << variable << endl;
}
,類似的做法在Valgrind的DRD手冊(3210)涉及從STD派生一個類解釋說這將是更好,如果能有一個線程安全的版本替換CERR :: ostreambuf 。理想情況下,最後我會用我自己的螺紋cerr來代替cerr,例如簡單地說:
tcerr << "my variable: " << variable << endl;
這樣的類只要遇到「endl」就可以打印到控制檯。我不介意來自不同線程的線是否交錯,但每條線只能來自一個線程。
我真的不明白C++中的所有流是如何工作的,它太複雜了。有沒有人有這樣的課程,或者可以告訴我如何爲此目的創建這樣的課程?
請不要暗示的printf ..;) – Wolfgang 2013-02-22 21:55:07
*「這當然不是安全的」 * - 這是不是在C++ 11真正的,除非你採取故意的動作,使其真正。 – 2013-02-22 21:56:38
你的頭銜說'cout'不是'cerr'。 – Barmar 2013-02-22 21:59:56