pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; int counter = 0; void *thread_func(void *args) { pthread_mutex_lock(&mutex); counter++; /* geschützter Bereich */ pthread_mutex_unlock(&mutex); }
ja: | setze mutex auf "besetzt" und fahre fort |
nein: | warte, bis mutex auf "frei" steht |
.. while (pthread_mutex_trylock(&mutex) == EBUSY) { do_something_useful() } counter++; pthread_mutex_unlock(&mutex);
gefährlich:
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int pthread_mutex_init(pthread_mutex_t *mp,
const pthread_mutexattr_t * attr);
int pthread_mutex_destroy(pthread_mutex_t *mp);
int pthread_mutex_lock(pthread_mutex_t *mp);
int pthread_mutex_trylock(pthread_mutex_t *mp);
int pthread_mutex_unlock(pthread_mutex_t *mp);