Move the functionality for the following components to the new base support library: - BoundMethod - EventDispatcher - EventDispatcherPoll - Log - Message - Object - Signal - Semaphore - Thread - Timer While it would be preferable to see these split to move one component per commit, these components are all interdependent upon each other, which leaves us with one big change performing the move for all of them. Reviewed-by: Hirokazu Honda <hiroh@chromium.org> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
35 lines
667 B
C++
35 lines
667 B
C++
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
/*
|
|
* Copyright (C) 2019, Google Inc.
|
|
*
|
|
* semaphore.h - General-purpose counting semaphore
|
|
*/
|
|
#ifndef __LIBCAMERA_BASE_SEMAPHORE_H__
|
|
#define __LIBCAMERA_BASE_SEMAPHORE_H__
|
|
|
|
#include <condition_variable>
|
|
|
|
#include <libcamera/base/thread.h>
|
|
|
|
namespace libcamera {
|
|
|
|
class Semaphore
|
|
{
|
|
public:
|
|
Semaphore(unsigned int n = 0);
|
|
|
|
unsigned int available();
|
|
void acquire(unsigned int n = 1);
|
|
bool tryAcquire(unsigned int n = 1);
|
|
void release(unsigned int n = 1);
|
|
|
|
private:
|
|
Mutex mutex_;
|
|
std::condition_variable cv_;
|
|
unsigned int available_;
|
|
};
|
|
|
|
} /* namespace libcamera */
|
|
|
|
#endif /* __LIBCAMERA_BASE_SEMAPHORE_H__ */
|