You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于C++23中std::print()的线程安全性与文本交错问题咨询

关于C++23 std::print的线程安全与文本交错问题

线程安全(无数据竞争)

std::print是线程安全的,不存在数据竞争。根据C++23标准,所有针对标准输出流(std::print默认输出目标为stdout)的格式化输出操作,都满足数据竞争避免要求——不同线程对这些操作的并发执行不会触发未定义行为。

文本交错问题

你猜测的文本交错情况确实会发生。std::print的单个调用是原子性的:一次std::print输出的完整内容不会被其他线程的std::print调用打断,但多个独立的std::print调用之间没有隐式同步机制。

比如你示例中的场景,线程1的两次std::print调用、线程2的两次std::print调用,这四个操作的执行顺序是不确定的,完全可能出现类似如下的交错输出:

She sells The quick brown fox seashells by the seashore 
jump over the lazy dog 

这和std::cout的行为完全一致:单个operator<<调用是原子的,但多次调用之间没有默认同步。

标准依据

C++23标准的**[format.output]**章节明确规定:

  1. 针对标准流的格式化输出函数,并发调用不会引入数据竞争;
  2. 每个格式化输出函数的调用会将整个输出序列作为一个整体写入流,不会被其他并发的格式化输出操作打断,但不同调用之间的执行顺序不做保证。

内容的提问来源于stack exchange,提问作者justANewb stands with Ukraine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 05:15:22