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

Dependencies:   mbed

Semaphore.h

Committer:
shintamainjp
Date:
2010-09-09
Revision:
1:70466efca68e
Parent:
0:49c0ef6111e6

File content as of revision 1:70466efca68e:

#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) {
            return false;
        }
        __strex(SemTaken, &s);
        return true;
    }
    void release() {
        __strex(SemFree, &s);
        s = SemFree;
    }
private:
    enum { SemFree, SemTaken };
    volatile int s;
};

#endif