mirror of https://github.com/ArduPilot/ardupilot
HAL_Linux: added Semaphore_Recursive
This commit is contained in:
parent
55dfefb2d6
commit
b347027e13
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue