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

如何使用do while等循环时不阻塞其他代码 实现多内容并行输出

问题原因

  • 代码默认在单线程环境下按书写顺序串行执行,前一个for循环未完全执行完毕时,后一个循环的代码不会被调度运行。
  • 你预期的交替输出本质是两个循环任务并行执行,单线程场景下无法实现该效果。

解决方法

使用C++11及以上标准库提供的std::thread开启多线程,让两个循环分别在独立线程中并行运行即可,示例代码如下:

#include <iostream>
#include <thread>
#include <windows.h>
// 若为Linux环境替换上面的头文件为 #include <unistd.h>,并将Sleep(1000)改为sleep(1)

// 封装第一个循环任务
void loop1() {
    for (int i = 0; i < 1000; i++) {
        // 加换行符是为了触发输出缓冲区刷新,避免内容攒堆后一次性输出
        std::cout << "hey\n";
        Sleep(1000);
    }
}

// 封装第二个循环任务
void loop2() {
    for (int i = 0; i < 1000; i++) {
        std::cout << "hey number 2\n";
        Sleep(1000);
    }
}

int main() {
    // 启动两个独立线程分别执行两个循环
    std::thread t1(loop1);
    std::thread t2(loop2);
    
    // 阻塞主线程,等待两个子线程都执行完成后再退出程序
    t1.join();
    t2.join();
    return 0;
}

补充说明

如果运行时出现两行输出内容混在同一行的情况,是因为std::cout的输出操作本身不是原子操作,多线程同时输出时会出现竞态条件,可加std::mutex互斥锁保护输出操作即可解决。
如果使用的C版本低于C11,可替换为对应平台原生多线程接口实现:Windows下用CreateThread,Linux下用pthread。

内容的提问来源于stack exchange,提问作者rainbowisrainbow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:12:01