dola963keのメモ帳

組込機器や通信/ネットワークの技術要素、生活に関する話題

c++11のthreadを使ってみる

複数のパラメータを変更して1つのアルゴリズムを行うシミュレーションを行うことになりました。マルチスレッドでシミュレーションを行うためにC++11のthreadについて調べてみました。

 

~実験~

メインスレッドでスレッドを3つ起動して,それぞれのスレッドIDを表示する。

 

~結果~

multithreading is executed.
Main thread ID is 0x7fff78e22310
0x105b4c000 is working.
0x105bcf000 is working.
0x105c52000 is working.

各スレッドのIDが違うため,無事複数スレッドが起動したことが分かる。

 

~注意点~

複数のスレッドが同一のリソース(上記の例では標準出力)を使用するときには割り込みを考慮する必要がある。mutexのメンバ関数であるlockとunlockを使用してリソースの確保をする必要がある。

mutex mtx; //(グローバル変数)

mtx.lock(); //(リソースの確保)

cout << "Hello!" << endl; //(標準出力にHello!を出力)

mtx.unlock(); (リソースの解放)

 

(lock_guardなる便利なクラスがある。)

 

参考:

thread (C++11) - cpprefjp - C++ Library Reference

mutex (C++11) - cpprefjp - C++ Library Reference