Independent Dog

My EDA life record

STL Thread

多執行序(Thread),是C++11後一個有效加速程式的方法。即便只有單一質性序也可以大幅加快程式執行速度。
要注意的是在使用thread時,要在compile中將cpp編譯成obj的指令(-c)加入-lpthread,此篇文章指講述我使用過的指令當作學習紀錄,想要跟加深入了解救自己翻reference吧。

  • 簡易介紹
  • 運用於 function
  • 運用於 class 之 member function

簡易介紹

MSDN
MSDN

圖片來自於MSDN的網頁,Thread其實觀念並不複雜,就只是同時啟動多個執行序。重要的是要保證每個執行序的資料獨立性,如果共用的話會產生double free的錯誤。先完成的執行續做了free的動作,這會導致還在執行的執行序產生不可預期的錯誤。此種錯誤debug上也相當困難故須謹慎。
join為Thread的member function,功用為在此處等待其物件執行完成。

運用於 function

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <thread>
using namespace std;
void foo(){/* something */};
void foo2( int i ){/* something */};
int main()
{
thread th1(foo);
thread th2(foo2,0);
th1.join();
th2.join();
}

運用於 class 中之 member function

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <thread>
using namespace std;
class foo
{
void var(){/* something */};
void var2(int *a){/* something */};
void thr()
{
int a;
thread th1(&foo::var,this);//執行物件中的var物件函式
thread th2(&foo::var2,this,&a);
}
}
int main()
{
thread th2(&foo::var,var());//建立新物件並執行var
}

此篇大致上作為紀錄,筆者尚未摸透Thread之底層執行法故不做贅述

Reference:

Thread cplusplus
官方文件
Heresy Space

⬅️ Go back