robert bouwens
/
TestSemaphoreProgram
testharness for my semphore class
Diff: Semaphore.h
- Revision:
- 0:a2eb037fbb76
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Semaphore.h Tue Sep 14 20:38:26 2010 +0000 @@ -0,0 +1,34 @@ +// Copyright (C) 2010 Robert M. Bouwens + +#ifndef _SEMAPHORE_H_ +#define _SEMAPHORE_H_ + +/* + * http://mbed.org/forum/mbed/topic/181/#comment-799 + */ + +class Semaphore { +public: + Semaphore(): s(SemFree) {}; + + bool try_enter() { + int oldval = __ldrex(&s); + if (oldval == SemTaken) { + __clrex(); + return false; + } + s = SemTaken; + __clrex(); + return SemTaken == s; + }; + + void release() { + s = SemFree; + }; + +private: + enum { SemFree = 1, SemTaken = 2 }; + volatile int s; +}; + +#endif \ No newline at end of file