Files
allwpilib/hal/lib/athena/cpp/Semaphore.cpp
Peter Mitrano e71f454b9d Renamed folders for consistency, using sim/athena/shared schema (#27)
Rename the following folders:
hal/lib/Athena -> hal/lib/athena
hal/lib/Desktop -> hal/lib/sim
hal/lib/Shared -> hal/lib/shared
wpilibc/Athena -> wpilibc/athena
wpilibc/simulation -> wpilibc/sim

Windows users may need to run gradlew clean after updating.
2016-05-22 14:55:51 -07:00

33 lines
1004 B
C++

/*----------------------------------------------------------------------------*/
/* Copyright (c) FIRST 2015-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. */
/*----------------------------------------------------------------------------*/
#include "HAL/cpp/Semaphore.hpp"
Semaphore::Semaphore(uint32_t count) { m_count = count; }
void Semaphore::give() {
std::lock_guard<priority_mutex> lock(m_mutex);
++m_count;
m_condition.notify_one();
}
void Semaphore::take() {
std::unique_lock<priority_mutex> lock(m_mutex);
m_condition.wait(lock, [this] { return m_count; });
--m_count;
}
bool Semaphore::tryTake() {
std::lock_guard<priority_mutex> lock(m_mutex);
if (m_count) {
--m_count;
return true;
} else {
return false;
}
}