一般来说,我假设流不同步,由用户做适当的锁定.但是,做cout标准库中的特殊处理吗?
也就是说,如果多个线程正在写入,cout它们会破坏cout对象吗?据我所知,即使同步,你仍然会得到随机交错的输出,但保证交错.也就是说,cout从多个线程使用是否安全?
该供应商是否依赖?gcc做什么?
重要提示:如果您说"是",请为您的答案提供某种参考,因为我需要某种证明.
我关注的还不是基础系统调用,这些都很好,但是流在顶部添加了一层缓冲.
我有通过cout和cerr写入控制台的OpenMP线程.这当然不安全,因为输出可以交错.我可以做点什么
#pragma omp critical(cerr)
{
cerr << "my variable: " << variable << endl;
}
Run Code Online (Sandbox Code Playgroud)
如果可以用线程安全版本替换cerr会更好,类似于valgrind DRD手册中解释的方法(http://valgrind.org/docs/manual/drd-manual.html#drd-manual.effective- use)涉及从std :: ostreambuf派生一个类.理想情况下,最后我会用自己的线程cerr替换cerr,例如:
tcerr << "my variable: " << variable << endl;
Run Code Online (Sandbox Code Playgroud)
一旦遇到"endl",这样的类就可以打印到控制台.我不介意来自不同线程的行是否是交错的,但每行应仅来自一个线程.
我真的不明白C++中的所有这些流是如何工作的,它太复杂了.有没有人这样的课程或者可以告诉我如何为此目的创建这样的课程?