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