爲了更好的實現並行運算,可以採用多線程,多線程的初始運行函數有三種傳參方式,和普通函數一樣,分別是值傳遞、引用、指針。當涉及多個線程同時修改某一共享數據時,爲了防止數據破壞,可使用線程同步,以下是實現的一個例子
#include <thread>
#include <mutex>
struct param
{
int nMaxIndex;
....
};
void threadFunction(void *param)
{
std::lock_guard<std::mutex> mtx_locker(mtx); //多線程同時修改共享數據的處理:數據同步
struct param *funPara = (struct param*)param;
int nMaxIndex = funPara->nMaxIndex;
.........
}
void main()
{
struct param ParamStrucrt;
ParamStrucrt.nMaxIndex = nMaxIndex;
std::thread threadPro(threadFunction, &ParamStrucrt);
threadPro.detach();//獨立於引用線程(本例main函數所在線程,線程結束資源釋放)
//threadPro.join();//引用線程堵塞,直到threadPro執行完畢,再執行後面代碼
......
}
實驗過程中發現main函數中同時實例化兩個並列線程,分別設置成join方式,則兩個線程是順序執行的,與不設線程沒有區別,沒弄明白,希望大牛給與指點