マルチスレッドなプログラムを書くとき, 常に念頭に置きながら設計しなければならないのが排他制御だが,そんなとき,どの処理がどのスレッドで実施されているか表示できることは非常に有効なテクニックだ.
そこで次のようなコードで実験する.
<サンプルコード:test.cpp>
test.cpp
--------------------------------------------------------------------------------
#include <iostream>
#include <thread>
#include <unistd.h>
void a( void )
{
for( int i = 0; i < 30; i++ )
{
std::cout << "i : " << i << std::endl;
sleep( 1 );
}
}
void b( void )
{
for( int j = 0; j < 10; j++ )
{
std::cout << "j : " << j << std::endl;
sleep( 3 );
}
}
int main( void )
{
std::thread * _a = new std::thread( a );
std::thread * _b = new std::thread( b );
_a->join();
_b->join();
return 0;
}
※本来は,coutする前後でmutexを貼る必要があるが,今回は可読性重視で割愛する.
これをコンパイルして,gdbで実行する
$ g++ -g -pthread test.cpp -o test $ gdb ./test



