Tôi có chủ đề OpenMP ghi vào bàn điều khiển qua cout và cerr. Điều này tất nhiên là không an toàn, vì đầu ra có thể được xen kẽ. Tôi có thể làm một cái gì đó giống nhưnhiều chủ đề viết tới std :: cout hoặc std :: cerr
#pragma omp critical(cerr)
{
cerr << "my variable: " << variable << endl;
}
Nó sẽ đẹp hơn nếu có thể thay thế cerr với một phiên bản thread-safe, tương tự như cách tiếp cận giải thích trong cuốn hướng dẫn valgrind DRD (http://valgrind.org/docs/manual/drd-manual.html#drd-manual.effective-use) trong đó bao gồm phát sinh một lớp từ std :: ostreambuf . Lý tưởng nhất là cuối cùng tôi sẽ chỉ thay thế cerr bằng cerr có chuỗi của riêng tôi, ví dụ: chỉ cần:
tcerr << "my variable: " << variable << endl;
Lớp học như vậy có thể in ra bàn điều khiển ngay sau khi nó gặp "lỗi". Tôi không quan tâm nếu các dòng từ các chủ đề khác nhau được xen kẽ, nhưng mỗi dòng sẽ chỉ xuất phát từ một chuỗi.
Tôi không thực sự hiểu cách tất cả luồng này trong C++ hoạt động, nó quá phức tạp. Có ai như một lớp học hoặc có thể chỉ cho tôi làm thế nào để tạo ra một lớp học như vậy cho mục đích đó?
xin đừng đề nghị printf ..;) – Wolfgang
* "Điều này tất nhiên không phải là an toàn" * - Điều này không đúng trong C++ 11, trừ khi bạn hành động có chủ ý để làm cho nó thật . –
Tiêu đề của bạn nói 'cout' không phải là' cerr'. – Barmar