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);