From 8200f6ff1edca15756a22e6359f20836c4b5425b Mon Sep 17 00:00:00 2001 From: rpj Date: Wed, 27 Feb 2002 22:53:15 +0000 Subject: * exception3.c (terminateFunction): For MSVC++, call exit() rather than pthread_exit(). Add comments to explain why. * rwlock2_t.c: New test. * rwlock3_t.c: New test. * rwlock4_t.c: New test. * rwlock5_t.c: New test. * rwlock6_t.c: New test. * rwlock6_t2.c: New test. * rwlock6.c (main): Swap thread and result variables to correspond to actual thread functions. * rwlock1.c: Change test description comment to correspond to the actual test. --- tests/rwlock6.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'tests/rwlock6.c') diff --git a/tests/rwlock6.c b/tests/rwlock6.c index 78fd7b3..86bedff 100644 --- a/tests/rwlock6.c +++ b/tests/rwlock6.c @@ -35,9 +35,9 @@ * * -------------------------------------------------------------------------- * - * Check that writer locks have priority. + * Check writer and reader locking * - * Depends on API functions: + * Depends on API functions: * pthread_rwlock_rdlock() * pthread_rwlock_wrlock() * pthread_rwlock_unlock() @@ -51,23 +51,25 @@ static int bankAccount = 0; void * wrfunc(void * arg) { + int ba; + assert(pthread_rwlock_wrlock(&rwlock1) == 0); Sleep(2000); bankAccount += 10; + ba = bankAccount; assert(pthread_rwlock_unlock(&rwlock1) == 0); - return ((void *) bankAccount); + return ((void *) ba); } void * rdfunc(void * arg) { - int ba = 0; + int ba; assert(pthread_rwlock_rdlock(&rwlock1) == 0); ba = bankAccount; assert(pthread_rwlock_unlock(&rwlock1) == 0); - ba += 10; return ((void *) ba); } @@ -85,17 +87,17 @@ main() assert(pthread_create(&wrt1, NULL, wrfunc, NULL) == 0); Sleep(500); - assert(pthread_create(&wrt2, NULL, rdfunc, NULL) == 0); + assert(pthread_create(&rdt, NULL, rdfunc, NULL) == 0); Sleep(500); - assert(pthread_create(&rdt, NULL, wrfunc, NULL) == 0); + assert(pthread_create(&wrt2, NULL, wrfunc, NULL) == 0); assert(pthread_join(wrt1, (void **) &wr1Result) == 0); - assert(pthread_join(wrt2, (void **) &wr2Result) == 0); assert(pthread_join(rdt, (void **) &rdResult) == 0); + assert(pthread_join(wrt2, (void **) &wr2Result) == 0); assert(wr1Result == 10); + assert(rdResult == 10); assert(wr2Result == 20); - assert(rdResult == 20); return 0; } -- cgit v1.2.3