std::basic_osyncstream
是 std::basic_syncbuf
的便捷包装器。其核心思想是利用 RAII(Resource Acquisition Is Initialization)机制,为每个线程创建一个独立的同步缓冲区(sync buffer)。当线程向 std::basic_osyncstream
写入数据时,数据首先被写入到线程的独立缓冲区中,而不是直接写入目标流。只有在以下两种情况下,缓冲区的内容才会被原子式地写入目标流:
-
对象析构:当
std::basic_osyncstream
对象析构时,其内部的缓冲区内容会被自动写入目标流。 -
显式刷新:调用
std::basic_osyncstream
的emit
方法或插入换行符(如std::endl
)时,缓冲区的内容会被刷新到目标流。
这种设计使得 std::basic_osyncstream
能够在不牺牲性能的前提下,提供线程安全的输出流操作。