testharness for my semphore class

Dependencies:   mbed

Semaphore.h

Committer:
roberto_b
Date:
2010-09-14
Revision:
0:a2eb037fbb76

File content as of revision 0:a2eb037fbb76:

//  Copyright (C) 2010 Robert M. Bouwens

#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) {
            __clrex();
            return false;
        }
        s = SemTaken;
        __clrex();
        return SemTaken == s;
    };

    void release() {
        s = SemFree;
    };

private:
    enum { SemFree = 1, SemTaken = 2 };
    volatile int s;
};

#endif