summaryrefslogtreecommitdiff
path: root/tests/rwlock6.c
diff options
context:
space:
mode:
authorrpj <rpj>2002-02-27 22:53:15 +0000
committerrpj <rpj>2002-02-27 22:53:15 +0000
commit8200f6ff1edca15756a22e6359f20836c4b5425b (patch)
treeec67536235acd2694da7cae80fdef05ccfc27099 /tests/rwlock6.c
parent586f6933530d1e0c3bf0d2b1fec2377056340107 (diff)
* 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.
Diffstat (limited to 'tests/rwlock6.c')
-rw-r--r--tests/rwlock6.c20
1 files changed, 11 insertions, 9 deletions
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;
}