1

假设我有这样的代码:

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),答案是否会改变?

4

1 回答 1

1

没有。

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

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

于 2013-10-11T16:27:37.227 回答