【发布时间】:2013-01-21 00:07:20
【问题描述】:
我有一个多线程应用程序,它大量使用std::cout 进行日志记录而没有任何锁定。在这种情况下,如何轻松添加锁机制使std::cout线程安全?
我不想搜索std::cout 的每次出现并添加一行锁定代码。太乏味了。
有更好的做法吗?
【问题讨论】:
-
这实际上是讨论的主题之一,并在this video 中给出了示例。它的使用时间大约是 48 分钟,而实现是在此之前的一段时间,因为它之前有一个字符串示例。
-
std::cout已经是线程安全的。你的意思是你希望每次刷新都序列化实际的文本块? -
第 27.4.1 节:
Concurrent access to a synchronized (27.5.3.4) standard iostream object’s formatted and unformatted in- put (27.7.2.1) and output (27.7.3.1) functions or a standard C stream by multiple threads shall not result in a data race (1.10). -
然而,标准说:“[注意:如果用户希望避免交错字符,他们仍必须同步多个线程对这些对象和流的并发使用。-结束注释]”
-
@xmllmx:这又回到了我所说的:它已经是线程安全的,你想进一步序列化每次刷新的字符显示吗?
标签: c++ multithreading logging locking iostream