- 管理线程的函数和类在< thread >中声明,而保护共享数据的函数和类在其他头文件中声明
- 每个线程都必须有一个初始函数,新线程的执行从这里开始。对于应用程序来说,初始线程是main(),但是对于其他线程,可以在std::thread对象的构造函数中指定,本例中,被命名为t的std::thread对象拥有新函数hello()作为其初始函数
- 与直接写入标准输出或是从main()调用hello()不同,该程序启动了一个全新的线程来实现,将线程数量一分为二——初始线程始于main(),而新线程始于hello()。
- 新的线程启动之后,初始线程继续执行。如果它不等待新线程结束,它就将自顾自地继续运行到main()的结束,从而结束程序——有可能发生在新线程运行之前。这就是为什么在这里调用 join() 的原因——这会导致调用线程(在main()中)等待与 std::thread 对象相关联的线程,即这个例子中的t
#include<iostream> #include<thread> using namespace std; void hello() { cout << "hello consurrent world\n"; } int main() { thread t(hello); t.join(); system("pause"); return 0; }
- 使用C++线程库启动线程,可以归结为构造 std::thread 对象:
void do_some_work(); std::thread my_thread(do_some_work);
- join(),阻塞主线程,主线程等待该线程执行完再执行
- detach(),分离线程
多线程编程1
