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