假设我有这样的代码:
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,那么)答案是否会改变?
答案 0 :(得分:1)
不。
即使您正在异步运行两个线程(我不知道您是否在这里),在每个线程内按顺序执行命令。
因此,您的thread()将首先打印“胎面完成处理”,然后将数据放入结果队列中。只有这样,你的main()才会得到消息并打印出“主要结果”。