#include <cmath>
#include <boost/noncopyable.hpp>
-#include <boost/thread/mutex.hpp>
-#include <boost/thread/condition_variable.hpp>
#include <map>
+#include <mutex>
#include <queue>
#include <functional>
+#include <boost/thread/condition_variable.hpp>
+
namespace caspar {
/**
*/
class semaphore : boost::noncopyable
{
- mutable boost::mutex mutex_;
+ mutable std::mutex mutex_;
unsigned int permits_;
boost::condition_variable_any permits_available_;
std::map<unsigned int, std::queue<std::function<void()>>> callbacks_per_requested_permits_;
*/
void release()
{
- boost::unique_lock<boost::mutex> lock(mutex_);
+ std::unique_lock<std::mutex> lock(mutex_);
++permits_;
*/
void release(unsigned int permits)
{
- boost::unique_lock<boost::mutex> lock(mutex_);
+ std::unique_lock<std::mutex> lock(mutex_);
permits_ += permits;
*/
void acquire()
{
- boost::unique_lock<boost::mutex> lock(mutex_);
+ std::unique_lock<std::mutex> lock(mutex_);
while (permits_ == 0u)
{
*/
void acquire(unsigned int permits)
{
- boost::unique_lock<boost::mutex> lock(mutex_);
+ std::unique_lock<std::mutex> lock(mutex_);
auto num_acquired = 0u;
while (true)
*/
void acquire(unsigned int permits, std::function<void()> acquired_callback)
{
- boost::unique_lock<boost::mutex> lock(mutex_);
+ std::unique_lock<std::mutex> lock(mutex_);
if (permits_ >= permits)
{
template <typename Rep, typename Period>
bool try_acquire(unsigned int permits, const boost::chrono::duration<Rep, Period>& timeout)
{
- boost::unique_lock<boost::mutex> lock(mutex_);
+ std::unique_lock<std::mutex> lock(mutex_);
auto num_acquired = 0u;
while (true)
*/
bool try_acquire()
{
- boost::unique_lock<boost::mutex> lock(mutex_);
+ std::unique_lock<std::mutex> lock(mutex_);
if (permits_ == 0u)
return false;
*/
unsigned int permits() const
{
- boost::unique_lock<boost::mutex> lock(mutex_);
+ std::unique_lock<std::mutex> lock(mutex_);
return permits_;
}