1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
/* Copyright (C) 2008 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by David Bartley <dtbartle@csclub.uwaterloo.ca>, 2008.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#ifndef _SYNCH_H
#define _SYNCH_H
#include <sys/synch.h>
#include <features.h>
typedef lwp_mutex_t mutex_t;
typedef lwp_cond_t cond_t;
typedef lwp_rwlock_t rwlock_t;
typedef lwp_sema_t sema_t;
#define SEMA_HELD(x) _sema_held (x)
#define RW_READ_HELD(x) _rw_read_held (x)
#define RW_WRITE_HELD(x) _rw_write_held (x)
#define RW_LOCK_HELD(x) (RW_READ_HELD (x) || RW_WRITE_HELD (x))
#define MUTEX_HELD(x) _mutex_held (x)
__BEGIN_DECLS
/* syscalls */
int _lwp_mutex_lock (lwp_mutex_t *);
int _lwp_mutex_unlock (lwp_mutex_t *);
int _lwp_mutex_trylock (lwp_mutex_t *);
int _lwp_cond_wait (lwp_cond_t *, lwp_mutex_t *);
int _lwp_cond_timedwait (lwp_cond_t *, lwp_mutex_t *, struct timespec *);
int _lwp_cond_reltimedwait (lwp_cond_t *, lwp_mutex_t *, struct timespec *);
int _lwp_cond_signal (lwp_cond_t *);
int _lwp_cond_broadcast (lwp_cond_t *);
int _lwp_sema_init (lwp_sema_t *, int);
int _lwp_sema_wait (lwp_sema_t *);
int _lwp_sema_trywait (lwp_sema_t *);
int _lwp_sema_post (lwp_sema_t *);
/* condition variables */
int cond_init (cond_t *, int, void *);
int cond_destroy (cond_t *);
int cond_wait (cond_t *, mutex_t *);
int cond_timedwait (cond_t *, mutex_t *, struct timespec *);
int cond_reltimedwait (cond_t *, mutex_t *, struct timespec *);
int cond_signal (cond_t *);
int cond_broadcast (cond_t *);
/* mutexes */
extern int mutex_init (mutex_t *, int, void *);
extern int mutex_destroy (mutex_t *);
extern int mutex_consistent (mutex_t *);
extern int mutex_lock (mutex_t *);
extern int mutex_trylock (mutex_t *);
extern int mutex_unlock (mutex_t *);
extern int _mutex_held (mutex_t *);
/* reader/writer locks */
extern int rwlock_init (rwlock_t *, int, void *);
extern int rwlock_destroy (rwlock_t *);
extern int rw_rdlock (rwlock_t *);
extern int rw_wrlock (rwlock_t *);
extern int rw_unlock (rwlock_t *);
extern int rw_tryrdlock (rwlock_t *);
extern int rw_trywrlock (rwlock_t *);
extern int _rw_read_held (rwlock_t *);
extern int _rw_write_held (rwlock_t *);
/* semaphores */
extern int sema_init (sema_t *, unsigned int, int, void *);
extern int sema_destroy (sema_t *);
extern int sema_wait (sema_t *);
extern int sema_timedwait (sema_t *, struct timespec *);
extern int sema_reltimedwait (sema_t *, const struct timespec *);
extern int sema_post (sema_t *);
extern int sema_trywait (sema_t *);
extern int _sema_held (sema_t *);
__END_DECLS
#endif /* _SYNCH_H */
|