Shinichiro Nakamura
/
StarBoardOrangeExample2
StarBoard Orange - Example application No.2 (Version 0.0.4)
extlib/Semaphore.h
- Committer:
- shintamainjp
- Date:
- 2010-08-13
- Revision:
- 0:5d79cd4ac81d
File content as of revision 0:5d79cd4ac81d:
#ifndef _SEMAPHORE_H_ #define _SEMAPHORE_H_ /* * http://mbed.org/forum/mbed/topic/181/#comment-799 */ class Semaphore { public: Semaphore(): s(SemFree) {}; bool take(bool block = true) { int oldval; do { oldval = __ldrex(&s); } while ((block && (oldval == SemTaken)) || (__strex(SemTaken, &s) != 0)); if (!block) { __clrex(); } return (oldval == SemFree); } void release() { s = SemFree; } private: enum { SemFree, SemTaken }; int s; }; #endif