0,0 → 1,103 |
/* |
* Project: S.Ha.R.K. |
* |
* Coordinators: |
* Giorgio Buttazzo <giorgio@sssup.it> |
* Paolo Gai <pj@gandalf.sssup.it> |
* |
* Authors : |
* Paolo Gai <pj@gandalf.sssup.it> |
* Massimiliano Giorgi <massy@gandalf.sssup.it> |
* Luca Abeni <luca@gandalf.sssup.it> |
* (see the web pages for full authors list) |
* |
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy) |
* |
* http://www.sssup.it |
* http://retis.sssup.it |
* http://shark.sssup.it |
*/ |
|
/*************************************** |
|
Mutexs for the user. |
|
***************************************/ |
|
/* |
* CVS : $Id: mutex.h,v 1.2 2003-03-13 13:41:04 pj Exp $ |
* |
* File: $File$ |
* Revision: $Revision: 1.2 $ |
* Last update: $Date: 2003-03-13 13:41:04 $ |
*/ |
|
/* |
* Copyright (C) 1999,2000 Massimiliano Giorgi |
* |
* This program is free software; you can redistribute it and/or modify |
* it under the terms of the GNU General Public License as published by |
* the Free Software Foundation; either version 2 of the License, or |
* (at your option) any later version. |
* |
* This program 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 General Public License for more details. |
* |
* You should have received a copy of the GNU General Public License |
* along with this program; if not, write to the Free Software |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
* |
*/ |
|
#ifndef _MUTEX_H |
#define _MUTEX_H |
|
/* |
#include <hartik/const.h> |
|
typedef struct { |
QUEUE queue; |
int value; |
} mutex_t; |
|
void mutex_init(mutex_t *); |
void mutex_lock(mutex_t *); |
int mutex_trylock(mutex_t *); |
void mutex_unlock(mutex_t *); |
*/ |
|
/* |
* temporary hack |
*/ |
|
#include <h/sys/kern.h> |
#include <h/sys/const.h> |
#include "ll/sys/cdefs.h" |
|
__BEGIN_DECLS |
|
/*+ a mutex object +*/ |
typedef SEM mutex_t; |
|
/* |
The following macros require a pointer to a mutex object and |
return nothing. |
*/ |
|
/* Initialize a mutex object +*/ |
#define mutex_init(ptr) { *(ptr)=sem_create(1); } |
|
/*+ Lock a mutex object +*/ |
#define mutex_lock(ptr) { sem_wait(*(ptr),BLOCK); } |
|
/*+ Try to lock a mutex (return 0 on success locking) +*/ |
#define mutex_trylock(ptr) { sem_wait(*(ptr),NON_BLOCK); } |
|
/*+ Unlock a mutex +*/ |
#define mutex_unlock(ptr) { sem_signal(*(ptr)); } |
|
__END_DECLS |
#endif |
|