forked RemoteIR
Fork of RemoteIR by
Semaphore.h
- Committer:
- shintamainjp
- Date:
- 2010-09-17
- Revision:
- 9:dcfdac59ef74
- Parent:
- 0:ec264f4ce158
File content as of revision 9:dcfdac59ef74:
#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 }; volatile int s; }; #endif