C++語言層面多線程=>好處:跨平臺 windows/linux thread/mutex/condition_variable lock_gurad/unique_lock atomic/原子類型,基於CAS操作的原子類型 線程安全的 睡眠sleep_for C++ thread => windo ...
C++語言層面多線程=>好處:跨平臺 windows/linux
thread/mutex/condition_variable
lock_gurad/unique_lock
atomic/原子類型,基於CAS操作的原子類型 線程安全的
睡眠sleep_for
C++ thread => windows 平臺用的createThread Linux用的pthread_create
簡單示例1
#include <iostream>
#include <thread>
using namespace std;
void threadHandler() {
//讓子線程睡眠2秒
std::this_thread::sleep_for(std::chrono::seconds(2));
cout << "hello threadHandler" << endl;
}
void threadHandler2(int x,int y) {
//讓子線程睡眠2秒
std::this_thread::sleep_for(std::chrono::seconds(2));
cout << "hello threadHandler2 (x+y)=" << (x+y) << endl;
}
int main() {
//創建一個線程對象,傳入一個線程函數,新線程就開始運行了
std::thread thread1(threadHandler);
//主線程等待子線程結束,主線程繼續向下運行
thread1.join();
//創建一個線程對象,傳入一個線程函數,新線程就開始運行了 ,傳遞參數
std::thread thread2(threadHandler2,100,200);
//主線程等待子線程結束,主線程繼續向下運行
thread2.join();
system("pause");
return 1;
}
簡單示例2
#include <iostream>
#include <thread>
using namespace std;
void threadHandler() {
//讓子線程睡眠2秒
std::this_thread::sleep_for(std::chrono::seconds(2));
cout << "hello threadHandler" << endl;
}
int main() {
//創建一個線程對象,傳入一個線程函數,新線程就開始運行了
std::thread thread1(threadHandler);
system("pause");
return 1;
}
簡單示例3
#include <iostream>
#include <thread>
using namespace std;
void threadHandler() {
//讓子線程睡眠2秒
std::this_thread::sleep_for(std::chrono::seconds(2));
cout << "hello threadHandler" << endl;
}
void threadHandler2() {
//讓子線程睡眠4秒
std::this_thread::sleep_for(std::chrono::seconds(4));
cout << "hello threadHandler2" << endl;
}
int main() {
//創建一個線程對象,傳入一個線程函數,新線程就開始運行了
std::thread thread1(threadHandler);
std::thread thread2(threadHandler);
//等待線程1,線程2結束
thread1.join();
thread2.join();
system("pause");
return 1;
}
小結:
一:怎麼創建啟動一個線程
std::thread定義一個線程對象,傳入線程所需要的線程函數和參數,線程自動開啟
二:子線程如何結束
子線程函數運行完成,那麼線程就結束了
三:主線程如何處理子線程
1:等待thread線程結束,當前線程繼續運行 thread.join();
2:設置thread線程為分離線程 thread.detach(); 主線程結束,整個進程結束,所有子線程都自動結束