我有这个示例代码:
#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()
函数。
当我们第一次学习写代码时,我们用铅笔和纸一步一步地完成它。然后我们知道了"电脑"。执行代码的方式与我们手工执行代码的方式相同。
但是说"电脑"如果程序使用多个线程,则不能充分描述它。更确切地说,当程序启动时,一个线程会逐步执行,逐行执行。然后,如果其中一行创建了另一个线程,那么这些线程同时开始并行执行(也称为并发),每个线程都有自己的一组局部变量,并共享全局变量。