У меня есть потоки OpenMP, которые пишут на консоль через cout и cerr. Это, конечно, небезопасно, так как вывод может чередоваться. Я мог бы сделать что-то вроденесколько потоков, записывающих в std :: cout или std :: cerr
#pragma omp critical(cerr)
{
cerr << "my variable: " << variable << endl;
}
Было бы лучше, если бы можно было заменить КВЖД с поточно-версией, подобный подход объясняется в руководстве Valgrind ДПДА (http://valgrind.org/docs/manual/drd-manual.html#drd-manual.effective-use), который включает в выводе класса из станда :: ostreambuf , В идеале, в конце концов, я бы просто заменил cerr своим собственным поточным cerr, например. просто:
tcerr << "my variable: " << variable << endl;
Такой класс может печатать на консоль, как только он встречает «endl». Я не против, если строки из разных потоков чередуются, но каждая строка должна поступать только из одного потока.
Я не совсем понимаю, как все это работает на C++, это слишком сложно. Кто-нибудь такой класс или может показать мне, как создать такой класс для этой цели?
пожалуйста не предлагают Printf ..;) – Wolfgang
* «Это, конечно, не безопасно» * - Это не верно в C++ 11, если не принимать намеренного действия, чтобы сделать его истинным , –
Ваше название говорит 'cout' не' cerr'. – Barmar