HAL_Linux: added Semaphore_Recursive

This commit is contained in:
Andrew Tridgell 2018-08-20 11:09:05 +10:00
parent 55dfefb2d6
commit b347027e13
2 changed files with 23 additions and 4 deletions

View File

@ -6,6 +6,21 @@ extern const AP_HAL::HAL& hal;
using namespace Linux;
// construct a semaphore
Semaphore::Semaphore()
{
pthread_mutex_init(&_lock, nullptr);
}
// construct a recursive semaphore (allows a thread to take it more than once)
Semaphore_Recursive::Semaphore_Recursive()
{
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
pthread_mutex_init(&_lock, &attr);
}
bool Semaphore::give()
{
return pthread_mutex_unlock(&_lock) == 0;
@ -33,3 +48,4 @@ bool Semaphore::take_nonblocking()
{
return pthread_mutex_trylock(&_lock) == 0;
}

View File

@ -10,14 +10,17 @@ namespace Linux {
class Semaphore : public AP_HAL::Semaphore {
public:
Semaphore() {
pthread_mutex_init(&_lock, nullptr);
}
Semaphore();
bool give();
bool take(uint32_t timeout_ms);
bool take_nonblocking();
private:
protected:
pthread_mutex_t _lock;
};
class Semaphore_Recursive : public Semaphore {
public:
Semaphore_Recursive();
};
}