我有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