1#ifndef _LOCK_H
2#define _LOCK_H
3
4#ifdef __cplusplus
5extern "C" {
6//#	define lock fsh_lock
7#endif
8
9typedef struct lock lock;
10typedef struct mlock mlock;
11
12struct lock {
13    sem_id      s;
14    long        c;
15};
16
17struct mlock {
18    sem_id      s;
19};
20
21extern int  new_lock(lock *l, const char *name);
22extern int  free_lock(lock *l);
23
24#define LOCK(l)     if (atomic_add(&l.c, -1) <= 0) acquire_sem(l.s);
25#define UNLOCK(l)   if (atomic_add(&l.c, 1) < 0) release_sem(l.s);
26
27extern int  new_mlock(mlock *l, long c, const char *name);
28extern int  free_mlock(mlock *l);
29
30#define     LOCKM(l,cnt)    acquire_sem_etc(l.s, cnt, 0, 0.0)
31#define     UNLOCKM(l,cnt)  release_sem_etc(l.s, cnt, 0)
32
33#ifdef __cplusplus
34}
35#endif
36
37#endif	/* _LOCK_H */
38