/* Copyright 1999-2001, Be Incorporated. All Rights Reserved. This file may be used under the terms of the Be Sample Code License. */ #ifndef _LOCK_H #define _LOCK_H #include #include #ifdef __cplusplus extern "C" { #else typedef struct lock lock; typedef struct mlock mlock; #endif struct lock { sem_id s; long c; }; struct mlock { sem_id s; }; extern _IMPEXP_KERNEL int new_lock(lock *l, const char *name); extern _IMPEXP_KERNEL int free_lock(lock *l); #define LOCK(l) if (atomic_add(&l.c, -1) <= 0) acquire_sem(l.s); #define UNLOCK(l) if (atomic_add(&l.c, 1) < 0) release_sem(l.s); extern _IMPEXP_KERNEL int new_mlock(mlock *l, long c, const char *name); extern _IMPEXP_KERNEL int free_mlock(mlock *l); #define LOCKM(l,cnt) acquire_sem_etc(l.s, cnt, 0, 0) #define UNLOCKM(l,cnt) release_sem_etc(l.s, cnt, 0) #ifdef __cplusplus } // extern "C" #endif #endif