示例一:
#include <iostream> #include <thread> using namespace std; void thread1() { for (int n = 0; n<4; n++) cout << "i am child thread" << endl; }//搶佔式 int main() { thread t(thread1); t.detach();//分離方式。主線程先結束的話,進程會結束,子線程亦會結束(不論子線程是否已執行完) //t.join();//阻塞方式。 for (int n = 0; n<4; n++) cout << "i am main thread" << endl; return 0; }
示例二:
#include <iostream> #include <thread> using namespace std; void thread1() { for (int n = 0; n<4; n++) cout << "i am child thread" << endl; }//搶佔式 int main() { thread t(thread1); t.detach();//分離方式。主線程先結束的話,進程會結束,子線程亦會結束(不論子線程是否已執行完) //t.join();//阻塞方式。 for (int n = 0; n<4; n++) cout << "i am main thread" << endl; while (true) { std::this_thread::sleep_for(std::chrono::microseconds(3)); } return 0; }
主線程加入while循環,一直執行不退出。子線程會執行完畢,不會發生:子線程未執行完,主線程退出了,子線程被迫結束。
示例三:
#include <iostream> #include <thread> using namespace std; void thread1() { for (int n = 0; n<4; n++) cout << "i am child thread" << endl; }//搶佔式 int main() { thread t(thread1); t.join();//阻塞方式。 for (int n = 0; n<4; n++) cout << "i am main thread" << endl; return 0; }
子線程執行完了之後,主線程纔會執行
示例四:
#include <iostream> #include <thread> using namespace std; void workFun(int index) { for (int i = 0; i < 100; i++) { cout << index << " child thread " << i << endl; std::this_thread::sleep_for(std::chrono::milliseconds(3)); } } int main() { thread t[3]; for (int n = 0; n<3; n++) { t[n] = thread(workFun, n); t[n].join(); } for (int i = 0; i<4; i++) cout <<"i am main thread "<< i << endl; return 0; }
子線程會順序執行,t[0]執行完--->t[1]執行完----->t[2]執行完
主線程執行
--------------------------------------------------
示例五:
#include <iostream> #include <thread> using namespace std; void workFun(int index) { for (int i = 0; i < 100; i++) { cout << index << " child thread " << i << endl; std::this_thread::sleep_for(std::chrono::milliseconds(3)); } } int main() { thread t[3]; for (int n = 0; n<3; n++) { t[n] = thread(workFun, n); } for (int n = 0; n<3; n++) { t[n].join(); } for (int i = 0; i<4; i++) cout <<"i am main thread "<< i << endl; return 0; }
子線程 t[0] t[1] t[2] 會並行執行。
子線程執行完成之後,主線程執行。