RemoteIR.

Dependents:   RemoteIR_TestProgram SerialGPS_TestProgram StarBoardOrangeExpansion1 Door_Slamming_Device ... more

Semaphore.h

Committer:
shintamainjp
Date:
2010-08-21
Revision:
5:e158c85c55ff
Parent:
0:ec264f4ce158
Child:
9:dcfdac59ef74

File content as of revision 5:e158c85c55ff:

#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