diff options
Diffstat (limited to 'tests/rwlock6.c')
-rw-r--r-- | tests/rwlock6.c | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/tests/rwlock6.c b/tests/rwlock6.c index 7daccd7..3f53520 100644 --- a/tests/rwlock6.c +++ b/tests/rwlock6.c @@ -1,30 +1,30 @@ -/* +/* * rwlock6.c * * Check that writer locks have priority. * * Depends on API functions: - * pthread_rwlock_rdlock() - * pthread_rwlock_wrlock() - * pthread_rwlock_unlock() + * pthread_rwlock_rdlock() + * pthread_rwlock_wrlock() + * pthread_rwlock_unlock() */ #include "test.h" - + static pthread_rwlock_t rwlock1 = PTHREAD_RWLOCK_INITIALIZER; -static int bankAccount; +static int bankAccount = 0; void * wrfunc(void * arg) { assert(pthread_rwlock_wrlock(&rwlock1) == 0); - Sleep(1000); + Sleep(2000); bankAccount += 10; assert(pthread_rwlock_unlock(&rwlock1) == 0); - return((void *) bankAccount); + return ((void *) bankAccount); } - + void * rdfunc(void * arg) { int ba = 0; @@ -34,9 +34,9 @@ void * rdfunc(void * arg) assert(pthread_rwlock_unlock(&rwlock1) == 0); ba += 10; - return((void *) ba); + return ((void *) ba); } - + int main() { @@ -47,11 +47,13 @@ main() int wr2Result = 0; int rdResult = 0; + bankAccount = 0; + assert(pthread_create(&wrt1, NULL, wrfunc, NULL) == 0); - Sleep(200); - assert(pthread_create(&rdt, NULL, rdfunc, NULL) == 0); - Sleep(200); - assert(pthread_create(&wrt2, NULL, wrfunc, NULL) == 0); + Sleep(500); + assert(pthread_create(&wrt2, NULL, rdfunc, NULL) == 0); + Sleep(500); + assert(pthread_create(&rdt, NULL, wrfunc, NULL) == 0); assert(pthread_join(wrt1, (void **) &wr1Result) == 0); assert(pthread_join(wrt2, (void **) &wr2Result) == 0); @@ -59,7 +61,7 @@ main() assert(wr1Result == 10); assert(wr2Result == 20); - assert(rdResult == 30); + assert(rdResult == 20); return 0; } |