Shinichiro Nakamura / Mbed 2 deprecated TestProgramForBugTopic1074

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Semaphore.h Source File

Semaphore.h

00001 #ifndef _SEMAPHORE_H_
00002 #define _SEMAPHORE_H_
00003 
00004 /*
00005  * http://mbed.org/forum/mbed/topic/181/#comment-799
00006  */
00007 
00008 class Semaphore {
00009 public:
00010     Semaphore(): s(SemFree) {}
00011     bool try_enter() {
00012         int oldval = __ldrex(&s);
00013         if (oldval == SemTaken) {
00014             return false;
00015         }
00016         __strex(SemTaken, &s);
00017         return true;
00018     }
00019     void release() {
00020         __strex(SemFree, &s);
00021         s = SemFree;
00022     }
00023 private:
00024     enum { SemFree, SemTaken };
00025     volatile int s;
00026 };
00027 
00028 #endif