00001
00002
00003
00004
00005
00006
00007
00008 #ifndef __mutex_h
00009 #define __mutex_h
00010
00011 #include <common/synchronizer.h>
00012
00013 __BEGIN_SYS
00014
00015 class Mutex : public Synchronizer_Common {
00016 private:
00017 typedef Traits<Mutex> Traits;
00018 static const Type_Id TYPE = Type<Mutex>::TYPE;
00019
00020 public:
00021 Mutex() : _locked(false) {db<Mutex>(TRC) << "Mutex()\n";}
00022 ~Mutex() {db<Mutex>(TRC) << "~Mutex()\n";}
00023
00024 void lock() {
00025 db<Mutex>(TRC) << "Mutex::lock()\n";
00026 while(tsl(_locked))
00027 sleep();
00028 }
00029
00030 void unlock() {
00031 db<Mutex>(TRC) << "Mutex::unlock()\n";
00032 _locked = false;
00033 wakeup();
00034 }
00035
00036 static int init(System_Info *si);
00037
00038 private:
00039 volatile bool _locked;
00040 };
00041
00042 __END_SYS
00043
00044 #endif