pthreads (5) mutexによる排他制御

・・・という問題があったので、mutexを使って排他制御をする。まずはグローバルに

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

とmutexを宣言して、pthread_mutex_lock()とpthread_mutex_unlock()を追加するだけ。超簡単。

void func(void)
{
     int i, tmp;
     for(i=0; i<5; i++){
          pthread_mutex_lock(&mutex);
          tmp = res;
          usleep(1);
          res = tmp + 1;
          pthread_mutex_unlock(&mutex);
     }
}

実行結果は

end: res=25

無事期待通り。