C++中的執行緒可以通過標準庫提供的thread類實作,該類提供了創建和管理執行緒的方法和函式,
創建執行緒的方法:
#include <thread>
...
// 創建一個執行緒,其執行函式為func1,傳遞引數為arg1
std::thread t1(func1, arg1);
// 創建一個執行緒,其執行函式為func2
std::thread t2(func2);
// 等待t1執行完畢
t1.join();
// 等待t2執行完畢
t2.join();
上述代碼中,func1和func2代表函式指標,arg1是傳遞給func1的引數,t1和t2是執行緒物件,join()方法用于等待執行緒執行完畢,
執行緒函式的定義:
執行緒函式可以是任何可呼叫物件,包括函式指標、函式物件、lambda運算式等,執行緒函式的實作需要注意執行緒安全問題,
#include <iostream>
#include <thread>
void worker(int id)
{
std::cout << "Worker " << id << " is starting..." << std::endl;
// 執行任務
std::cout << "Worker " << id << " is finished." << std::endl;
}
int main()
{
std::thread t1(worker, 1);
std::thread t2(worker, 2);
// 等待t1執行完畢
t1.join();
// 等待t2執行完畢
t2.join();
return 0;
}
如上述代碼所示,worker函式用于執行具體的任務,通過std::thread物件創建執行緒,將worker函式作為執行緒執行函式,并傳入引數,通過join()方法等待執行緒執行完畢,
執行緒的同步與互斥:
在多執行緒程式中,很容易出現多個執行緒同時訪問同一個資料或資源的情況,這時就需要對執行緒進行同步和互斥操作,以避免資料競爭等問題,
在C++中,提供了一些同步和互斥的機制,如:互斥鎖、條件變數、原子操作等,
#include <iostream>
#include <thread>
#include <mutex>
std::mutex m;
void worker(int id)
{
// 加鎖
m.lock();
std::cout << "Worker " << id << " is starting..." << std::endl;
// 執行任務
std::cout << "Worker " << id << " is finished." << std::endl;
// 解鎖
m.unlock();
}
int main()
{
std::thread t1(worker, 1);
std::thread t2(worker, 2);
// 等待t1執行完畢
t1.join();
// 等待t2執行完畢
t2.join();
return 0;
}
如上述代碼所示,為執行緒添加互斥鎖可以避免多個執行緒同時訪問同一個資料或資源的問題,執行互斥鎖加鎖和解鎖操作就可以實作執行緒之間的同步和互斥,
總結:
C++中提供了thread類實作執行緒的創建和管理,執行緒函式可以是任何可呼叫物件,在多執行緒編程中,需要注意執行緒安全問題,可以通過互斥鎖、條件變數等機制實作執行緒之間的同步和互斥,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/546406.html
標籤:C++
