まくまくC/C++ノート
pthread で mutex による排他制御を行う
2010-11-08

pthread によるスレッドにおいて、mutex オブジェクトを使用してスレッド間の排他制御を行うには、主に以下のようなメソッドを使用します。

int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);

まずは、pthread_mutex_init() を使用して pthread_mutex_t オブジェクトを初期化します。

static pthraad_mutex_t myMutex;

int main() {
    ...
    pthread_mutex_init(&myMutex, NULL);
    ...
}

そして、排他制御したい処理を、pthread_mutex_lock()pthread_mutex_unlock() で囲みます。

void* doSomething(void* arg) {
    ...

    pthread_mutex_lock(&myMutex);
    // この間でグローバル変数や共有リソースへ排他アクセス
    pthread_mutex_unlock(&myMutex);

    ...
}
2010-11-08