Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

C++11でのスレッドの生成とmutexによるリソースアクセス排他処理

#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;
}

pthreadに比べて大分楽になっている。
検証環境: OSX 10.10.3 Xcode6.3.2 GNU++11