1 2/* Needed for older glibcs (2.3 and older, at least) who don't 3 otherwise "know" about pthread_rwlock_anything or about 4 PTHREAD_MUTEX_RECURSIVE (amongst things). */ 5#define _GNU_SOURCE 1 6 7#include <stdio.h> 8#include <pthread.h> 9#include <assert.h> 10 11#if defined(VGO_darwin) 12#define OS_IS_DARWIN 1 13#else 14#define OS_IS_DARWIN 0 15#endif 16 17/* Do trivial stuff with a reader-writer lock. */ 18 19int main ( void ) 20{ 21 int r; 22 pthread_rwlock_t rwl; 23 24 r = pthread_rwlock_init( &rwl, NULL ); assert(r == 0); 25 26 r = pthread_rwlock_wrlock( &rwl ); assert(r == 0); 27 r = pthread_rwlock_unlock( &rwl ); assert(r == 0); 28 29 r = pthread_rwlock_rdlock( &rwl ); assert(r == 0); 30 r = pthread_rwlock_rdlock( &rwl ); assert(r == 0); 31 r = pthread_rwlock_unlock( &rwl ); assert(r == 0); 32 r = pthread_rwlock_unlock( &rwl ); assert(r == 0); 33 34 /* this should fail - lock is unowned now */ 35 r = pthread_rwlock_unlock( &rwl ); assert(OS_IS_DARWIN || r == 0); 36 37 r = pthread_rwlock_destroy( &rwl ); assert(r == 0); 38 39 return 0; 40} 41