Mam wątki OpenMP, które piszą do konsoli przez cout i cerr. To oczywiście nie jest bezpieczne, ponieważ dane wyjściowe mogą być przeplatane. mógłby zrobić coś jakwiele wątków zapisujących na std :: cout lub std :: cerr
#pragma omp critical(cerr)
{
cerr << "my variable: " << variable << endl;
}
byłoby ładniej, gdyby mógł zastąpić cerr z wersją wątku bezpieczny, podobne do podejścia opisane w instrukcji valgrind DRD (http://valgrind.org/docs/manual/drd-manual.html#drd-manual.effective-use), która obejmuje uzyskanie klasy z std :: ostreambuf . Idealnie na końcu zastąpiłbym cerr moim własnym carem gwintowanym, np. po prostu:
tcerr << "my variable: " << variable << endl;
Taka klasa może drukować na konsoli, gdy tylko napotka "końcówkę". Nie mam nic przeciwko temu, że linie z różnych wątków są przeplatane, ale każda linia powinna pochodzić tylko z jednego wątku.
Nie bardzo rozumiem, jak działa to strumieniowanie w C++, jest zbyt skomplikowane. Czy ktoś ma taką klasę lub może mi pokazać, jak stworzyć taką klasę do tego celu?
proszę nie sugerować printf ..;) – Wolfgang
* „To oczywiście nie jest bezpieczne” * - To nie jest prawda w C++ 11, chyba, że celowe działanie, aby to prawda . –
Twój tytuł mówi 'cout', a nie' cerr'. – Barmar