繁体   English   中英

多线程标准输出顺序

[英]stdout order with multiple threads

假设我有这样的代码:

main() {
    start thread;
    put data in task queue;
    do some stuff
    wait for data in result queue;
    printf ("main got result\n");
    fflush(stdout);
}

thread() {
    while (!done) {
        wait for data in task queue;
        printf ("thread finished processing\n");
        fflush(stdout);
        put data in result queue;
    }
}

如果我的线程安全数据队列正常工作,是否可以获取如下所示的输出?

main got result
thread finished processing

stdio可以像这样重新排序吗,还是可以肯定的证明我的“线程安全”队列不是?

如果我使用C ++进行编译并在上面的代码的main的“做一些事情”部分中使用iostreams(但仍在显示的地方使用printf),答案是否会更改?

不。

即使您异步运行两个线程(我也不知道您是否在这里),每个线程中的命令也会按顺序执行。

因此,您的thread()将首先打​​印“ tread完成的处理”,然后将数据放入结果队列。 只有这样,您的main()才会收到消息并打印“主要结果”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM