|
|
1.1.1.2 ! root 1: /* Copyright (C) 1993 Free Software Foundation, Inc.
1.1 root 2:
3: This file is part of GNU CC.
4:
5: GNU CC is free software; you can redistribute it and/or modify
6: it under the terms of the GNU General Public License as published by
7: the Free Software Foundation; either version 2, or (at your option)
8: any later version.
9:
10: GNU CC is distributed in the hope that it will be useful,
11: but WITHOUT ANY WARRANTY; without even the implied warranty of
12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13: GNU General Public License for more details.
14:
15: You should have received a copy of the GNU General Public License
16: along with GNU CC; see the file COPYING. If not, write to
17: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
18:
19: /* As a special exception, if you link this library with files
20: compiled with GCC to produce an executable, this does not cause
21: the resulting executable to be covered by the GNU General Public License.
22: This exception does not however invalidate any other reasons why
23: the executable file might be covered by the GNU General Public License. */
24:
25: #ifndef _MUTEX_H
26: #define _MUTEX_H
27:
28: #ifdef WANT_MUTEX
29: #if defined (NeXT)
30: #include <cthreads.h>
31: #define MUTEX mutex_t
32: #define MUTEX_ALLOC(mutex) { *mutex = mutex_alloc (); }
33: #define MUTEX_INIT(mutex) mutex_init (mutex)
34: #define MUTEX_FREE(mutex) mutex_free (mutex)
35: #define MUTEX_LOCK(mutex) mutex_lock (mutex)
36: #define MUTEX_UNLOCK(mutex) mutex_unlock (mutex)
37: #define MUTEX_ISLOCK(mutex) mutex->lock /* Gak */
38:
39: #elif defined (OSF)
40:
41: #elif defined (mach)
42:
43: #elif defined (sun)
44: /*
45: * Sun lwp uses monitors.
46: *
47: * Untested. 8-Dec-91, dennisg.
48: */
49: #include <lwp/lwp.h>
50: #include <assert.h>
51:
52: #define MUTEX (mon_t)
53:
54: inline MUTEX
55: MUTEX_ALLOC (mutex)
56: {
57: MUTEX mon;
58:
59: mon_create (&mon);
60: return mon;
61: }
62:
63: #define MUTEX_INIT(mutex)
64: #define MUTEX_FREE(mutex) mon_destroy (mutex)
65:
66: inline void
67: MUTEX_LOCK (mutex)
68: {
69: int level = mon_enter (mutex);
70: assert (level);
71: }
72:
73: #define MUTEX_UNLOCK(mutex) mon_exit (mutex)
74:
75: inline int
76: MUTEX_ISLOCK (mutex)
77: {
78: thread_t thread;
79:
80: /* Won't work? */
81: return mon_waiters (mutex, &thread, NULL, 0);
82: }
83:
84: #elif defined (COROUTINES)
85: /*
86: * A environment where threads are implemented as a
87: * set of coroutines.
88: */
89:
90: #endif
91: #endif
92:
93: #ifndef MUTEX
94: /*
95: * These are default mutex handler routines.
96: * There is no mutex support.
97: *
98: * Let the optimizer get rid of mutexes.
99: */
100:
101: #define MUTEX void *
102: #define MUTEX_ALLOC(mutex) (MUTEX)-1
103: #define MUTEX_INIT(mutex) (mutex)
104: #define MUTEX_FREE(mutex) (mutex)
105: #define MUTEX_LOCK(mutex) (mutex)
106: #define MUTEX_UNLOCK(mutex) (mutex)
107: #define MUTEX_ISLOCK(mutex) 1
108: #endif
109:
110: #endif /* not _MUTEX_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.