Files
allwpilib/hal/include/HAL/cpp/Semaphore.h
Tyler Veness 2c94d0ba2f Cleaned up integer type usage in the HAL (#192)
Replaced all uses of built-in types except char with stdint.h typedefs and all unsigned types with signed in the HAL
2016-09-06 19:39:28 -07:00

39 lines
1.1 KiB
C++

/*----------------------------------------------------------------------------*/
/* Copyright (c) FIRST 2016. All Rights Reserved. */
/* Open Source Software - may be modified and shared by FRC teams. The code */
/* must be accompanied by the FIRST BSD license file in the root directory of */
/* the project. */
/*----------------------------------------------------------------------------*/
#pragma once
#include <stdint.h>
#include <condition_variable>
#include "HAL/cpp/priority_mutex.h"
class Semaphore {
public:
explicit Semaphore(int32_t count = 0);
Semaphore(Semaphore&&);
Semaphore& operator=(Semaphore&&);
void give();
void take();
// @return true if semaphore was locked successfully. false if not.
bool tryTake();
static const int32_t kNoWait = 0;
static const int32_t kWaitForever = -1;
static const int32_t kEmpty = 0;
static const int32_t kFull = 1;
private:
priority_mutex m_mutex;
std::condition_variable_any m_condition;
int32_t m_count = 0;
};