thread.join()的逻辑在主循环(c++ boost/thread)后添加



我有这个示例代码:

#include <boost/thread/thread.hpp>
#include <iostream>
void hello()
{
while (1)
{
std::cout << "Hello thread!" << std::endl;
sleep(1);
}

}
int main(int argc, char *argv[])
{
boost::thread thrd(&hello);
while (1)
{
std::cout << "Hello main!" << std::endl;
sleep(1);
}
thrd.join();
return 0;
}

运行后,我得到了结果:

Hello main!
Hello thread!
Hello main!
Hello thread!
Hello main!
Hello main!
Hello thread!
Hello main!
Hello thread!
Hello main!
...

我认为主循环(while(1))应该阻塞进程,并且不应该调用线程thrd。但是结果不是这样的。

这个结果正确吗?thread.join()代码中位置的逻辑是什么?有什么官方文件可以参考吗?

thx

我认为主循环(while(1) {...})应该阻塞进程…

那么你完全误解了线程的目的。boost::thread thrd(&hello);的重点在于它独立于主线程运行hello()函数

当我们第一次学习写代码时,我们用铅笔和纸一步一步地完成它。然后我们知道了"电脑"。执行代码的方式与我们手工执行代码的方式相同。

但是说"电脑"如果程序使用多个线程,则不能充分描述它。更确切地说,当程序启动时,一个线程会逐步执行,逐行执行。然后,如果其中一行创建了另一个线程,那么这些线程同时开始并行执行(也称为并发),每个线程都有自己的一组局部变量,并共享全局变量。

相关内容

  • 没有找到相关文章

最新更新