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