#include <thread> #include <mutex> using namespace std; mutex m; // printf()呼び出し排他用 void worker( void* p ) { int data = *(int*)p; { // printfはスレッドセーフではないので、2つのスレッドから排他的にアクセスする。 // lock_guardはlock()のようなメソッドを持たず、 // コンストラクタでロックを取得し、デストラクタでロックを解除する機能しか持たない。 lock_guard<mutex> l(m); printf( "%d", data ); } } int main(int argc, const char * argv[]) { int data_a = 2; thread a(worker, (void*)&data_a); int data_b = 7; thread b(worker, (void*)&data_b); // 生成したスレッドが停止するのを待つ a.join(); b.join(); return 0; }