1.你好,并发世界
Posted 小勺挖泰山
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.你好,并发世界相关的知识,希望对你有一定的参考价值。
#include <iostream>
int main()
std::cout << "Hello world\\n";
这个程序所做的是将“Hello World” 写进标准输出流,下面启动一个独立的线程来显示“Hello, Concurrent World” 程序做个比较
#include <iostream>
#include <thread> // 1
void hello() // 2
std::cout<<"Hello Concurrent World\\n";
int main()
std::thread t(hello); // 3
t.join(); // 4
第一个区别是增加了 1 ,标准c++ 库中对多线程支持的声明在这个头文件中:管理线程的函数和类在<thread> 中声明,而保护共享数据的函数和类在其他头文件中声明。
其次,打印信息被移动到了独立函数2中,因为每个线程都必须具有一个初始函数,新线程执行从这里开始。对于应用程序来说,初始线程是main(), 但是对于其他线程,可以在 std::thread 对象的构造函数中指定, 在本例中,被命名为 t 3 的 thread 对象拥有新函数 hello() 作为其初始函数。
下一个区别:与直接写入标准输出或是从 main() 调用 hello 不同,该程序启动了一个全新的线程来实现,将线程数量一分为二: 初始线程始于main(), 而新线程始于hello().
新的线程启动之后 3, 初始线程继续执行。如果它不等待新线程结束,他就将自顾自地继续运行到main() 函数结束,从而终止程序。有可能发生在新线程运行之前,这就是为什么在4 这里调用 join() 函数的原因,这将导致调用线程(在main()中)等待与 std::thread 对象相关联的线程执行结束,即这个例子中的t。
这里只是作为一个演示,一般并不值得为了如此简单的打印任务而使用多线程,尤其是这期间初始线程并没有做什么。
以上是关于1.你好,并发世界的主要内容,如果未能解决你的问题,请参考以下文章