summaryrefslogtreecommitdiff
path: root/implement.h
diff options
context:
space:
mode:
authorrpj <rpj>2001-02-10 08:35:29 +0000
committerrpj <rpj>2001-02-10 08:35:29 +0000
commit1c38dfed3806cf142ebb0b1be473c88c5b2ac929 (patch)
tree0fa36b935802dfcfb1d4dfd28b3e3d791e49bc8d /implement.h
parent1648c7a97f27d10ad302c6141562ece01065e1d7 (diff)
2001-02-09 Ross Johnson <rpj@setup1.ise.canberra.edu.au>exp-2001-02-10-passed
* nonportable.c (pthread_mutex_setdefaulttype_np): New function for changing the default mutex type. * mutex.c (ptw32_InitializeCriticalSection): Removed. (ptw32_InitializeCriticalSection): Removed. (ptw32_InitializeCriticalSection): Removed. (ptw32_InitializeCriticalSection): Removed. (ptw32_InitializeCriticalSection): Removed. (pthread_mutex_init): Apply Thomas Pfaff's original patches; remove use of critical sections and adapt for different mutex types (see log entry for 2001-01-10). The disadvantage of using critical sections is that they don't appear to be sharable between processes. This implementation provides the opportunity to place mutex objects in shared memory. Thread priority determines the order in which waiting threads acquire the mutex although the implementation includes a mechanism to prevent threads hogging the mutex through successive unlock/lock operations. (pthread_mutex_destroy): Likewise. (pthread_mutex_lock): Likewise. (pthread_mutex_unlock): Likewise. (pthread_mutex_trylock): Likewise. * pthread.h (rand_r): Add redundant test of '_seed' arg to avoid "unused variable" warnings. Any good compiler will optimise the test away anyway.
Diffstat (limited to 'implement.h')
-rw-r--r--implement.h7
1 files changed, 5 insertions, 2 deletions
diff --git a/implement.h b/implement.h
index a1a52f8..8297a46 100644
--- a/implement.h
+++ b/implement.h
@@ -127,11 +127,14 @@ struct pthread_mutexattr_t_ {
};
struct pthread_mutex_t_ {
- int lock_idx;
- int try_lock;
+ long lock_idx;
+ long try_lock;
int pshared;
int type;
pthread_t owner;
+ long waiters; /* These last elements ensure fairness */
+ pthread_t lastOwner; /* and guard against canceled threads. */
+ pthread_t lastWaiter;
};
struct pthread_key_t_ {