pthreads (6) mutexによる排他制御(2)

mutexを動的に生成したいというような場合は、pthread_mutex_initで初期化。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>

#define THREADSNUM 5

void func(void);
int res=0;
pthread_mutex_t *mutex;

int main(void){
     pthread_t thread[THREADSNUM];
     int i;
     mutex = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t));
     pthread_mutex_init(mutex, NULL);
     for(i=0; i<THREADSNUM; i++){
          pthread_create(&thread[i], NULL, (void *)func, NULL);
     }
     for(i=0; i<THREADSNUM; i++){
          pthread_join(thread[i], NULL);
     }
     printf("end: res=%d\n", res);
     free(mutex);
     return 0;
}
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);
     }
}

pthread_mutex_initのAPIは以下の通り。

int pthread_mutex_init(pthread_mutex_t *mutex, 
                       const pthread_mutexattr_t *mutexattr);