多线程的stdout命令

时间:2013-10-11 16:21:01

标签: c++ iostream stdio

假设我有这样的代码:

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的“do some stuff”部分中使用iostreams(但仍然使用printf,那么)答案是否会改变?

1 个答案:

答案 0 :(得分:1)

不。

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

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