Ho thread OpenMP che scrivono sulla console tramite cout e cerr. Questo ovviamente non è sicuro, poiché l'output può essere interlacciato. Ho potuto fare qualcosa di similethread multipli che scrivono su std :: cout o std :: cerr
#pragma omp critical(cerr)
{
cerr << "my variable: " << variable << endl;
}
Sarebbe bello se potesse sostituire cerr con una versione thread-safe, simile all'approccio spiegato nel manuale valgrind DRD (http://valgrind.org/docs/manual/drd-manual.html#drd-manual.effective-use) che coinvolge derivare una classe da std :: ostreambuf . Idealmente alla fine sostituirò semplicemente cerr con il mio cerr thread, ad es. semplicemente:
tcerr << "my variable: " << variable << endl;
Tale classe potrebbe stampare sulla console non appena incontra un "endl". Non mi importa se le linee di thread diversi sono intercalate, ma ogni riga dovrebbe provenire solo da un thread.
Non ho veramente capito come tutto questo streaming in C++ funzioni, è troppo complicato. Qualcuno ha una classe o può mostrarmi come creare una classe del genere per quello scopo?
favore, non suggeriscono printf ..;) – Wolfgang
* "Questo, naturalmente, non è sicuro" * - Questo non è vero in C++ 11, a meno che non si prende azione intenzionale per renderlo vero . –
Il tuo titolo dice 'cout' not' cerr'. – Barmar