wul*_*pro 7 c++ multithreading
如果我正在同步线程join()
,考虑到加入调用的顺序,为什么我有时会看到t1
after 的输出t2
?
即
#include <thread>
void callFromThread(int id) {
int i = 1000;
while(i != 0) {
printf("%s %d\n", "hi from thread", id);
i--;
}
}
int main(void) {
std::thread t1 (callFromThread, 1);
std::thread t2 (callFromThread, 2);
t1.join();
t2.join();
printf("%s\n", "bye from main!");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我在连接调用之前的开头有一些交错,接着是所有剩余的t1输出,接着是剩余的t2输出,我可以理解行为.但是,相反,我看到所有t2然后都是t1,反之亦然.
join
影响您调用的当前线程join
,而不是连接的线程.
基本上,join使当前线程等待另一个线程完成执行.它对计划运行其他线程的时间或与其他线程相比的顺序没有影响.
在你的榜样,也不能保证它的线程t1
和t2
运行,并首先完成.唯一的保证是主线程先等待t1
,然后等待t2
,然后将消息记录到stdout.