This is for http://mbed.org/forum/bugs-suggestions/topic/1074/

Dependencies:   mbed

Committer:
shintamainjp
Date:
Thu Sep 09 10:21:06 2010 +0000
Revision:
1:70466efca68e
Parent:
0:49c0ef6111e6

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shintamainjp 0:49c0ef6111e6 1 #ifndef _SEMAPHORE_H_
shintamainjp 0:49c0ef6111e6 2 #define _SEMAPHORE_H_
shintamainjp 0:49c0ef6111e6 3
shintamainjp 0:49c0ef6111e6 4 /*
shintamainjp 0:49c0ef6111e6 5 * http://mbed.org/forum/mbed/topic/181/#comment-799
shintamainjp 0:49c0ef6111e6 6 */
shintamainjp 0:49c0ef6111e6 7
shintamainjp 0:49c0ef6111e6 8 class Semaphore {
shintamainjp 0:49c0ef6111e6 9 public:
shintamainjp 0:49c0ef6111e6 10 Semaphore(): s(SemFree) {}
shintamainjp 1:70466efca68e 11 bool try_enter() {
shintamainjp 1:70466efca68e 12 int oldval = __ldrex(&s);
shintamainjp 1:70466efca68e 13 if (oldval == SemTaken) {
shintamainjp 1:70466efca68e 14 return false;
shintamainjp 0:49c0ef6111e6 15 }
shintamainjp 1:70466efca68e 16 __strex(SemTaken, &s);
shintamainjp 1:70466efca68e 17 return true;
shintamainjp 0:49c0ef6111e6 18 }
shintamainjp 0:49c0ef6111e6 19 void release() {
shintamainjp 1:70466efca68e 20 __strex(SemFree, &s);
shintamainjp 0:49c0ef6111e6 21 s = SemFree;
shintamainjp 0:49c0ef6111e6 22 }
shintamainjp 0:49c0ef6111e6 23 private:
shintamainjp 0:49c0ef6111e6 24 enum { SemFree, SemTaken };
shintamainjp 1:70466efca68e 25 volatile int s;
shintamainjp 0:49c0ef6111e6 26 };
shintamainjp 0:49c0ef6111e6 27
shintamainjp 0:49c0ef6111e6 28 #endif