mirror of
https://github.com/kidfromjupiter/nearby.git
synced 2026-09-15 15:16:12 -04:00
Signed-off-by: Alexey Polyudov <apolyudov@google.com> Change-Id: I8936b527079074d5c3af5531b9245063767cc4a7
42 lines
1.2 KiB
C++
42 lines
1.2 KiB
C++
#ifndef PLATFORM_V2_API_MUTEX_H_
|
|
#define PLATFORM_V2_API_MUTEX_H_
|
|
|
|
#include "absl/base/thread_annotations.h"
|
|
|
|
namespace location {
|
|
namespace nearby {
|
|
namespace api {
|
|
|
|
// A lock is a tool for controlling access to a shared resource by multiple
|
|
// threads.
|
|
//
|
|
// https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Lock.html
|
|
class ABSL_LOCKABLE Mutex {
|
|
public:
|
|
// Mode to pass to implementation constructor.
|
|
// kRegular - produces a regular mutex: disallows multiple locks from
|
|
// the same thread; optionally, detects double locks in
|
|
// debug mode.
|
|
// This is the default option.
|
|
// kRecursive - produces recursive mutex: allows multiple locks from the
|
|
// same thread.
|
|
// kRegularNoCheck - produces a regular mutex: disallows double locks,
|
|
// but does not check for deadlocks.
|
|
enum class Mode {
|
|
kRegular = 0,
|
|
kRecursive = 1,
|
|
kRegularNoCheck = 2,
|
|
};
|
|
|
|
virtual ~Mutex() {}
|
|
|
|
virtual void Lock() ABSL_EXCLUSIVE_LOCK_FUNCTION() = 0;
|
|
virtual void Unlock() ABSL_UNLOCK_FUNCTION() = 0;
|
|
};
|
|
|
|
} // namespace api
|
|
} // namespace nearby
|
|
} // namespace location
|
|
|
|
#endif // PLATFORM_V2_API_MUTEX_H_
|