mirror of
https://github.com/kidfromjupiter/nearby.git
synced 2026-09-16 15:36:12 -04:00
nearby: snapshot of cl/313536507
Signed-off-by: Alexey Polyudov <apolyudov@google.com> Change-Id: I8936b527079074d5c3af5531b9245063767cc4a7
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
cc_library(
|
||||
name = "posix_mutex",
|
||||
srcs = [
|
||||
"posix_mutex.cc",
|
||||
],
|
||||
hdrs = [
|
||||
"posix_mutex.h",
|
||||
],
|
||||
visibility = [
|
||||
"//platform_v2/impl:__subpackages__",
|
||||
],
|
||||
deps = [
|
||||
"//platform_v2/api",
|
||||
"//platform_v2/base",
|
||||
],
|
||||
)
|
||||
|
||||
cc_library(
|
||||
name = "posix_condition_variable",
|
||||
srcs = [
|
||||
"posix_condition_variable.cc",
|
||||
],
|
||||
hdrs = [
|
||||
"posix_condition_variable.h",
|
||||
],
|
||||
visibility = [
|
||||
"//platform_v2/impl:__subpackages__",
|
||||
],
|
||||
deps = [
|
||||
":posix_mutex",
|
||||
"//platform_v2/api",
|
||||
"//platform_v2/base",
|
||||
],
|
||||
)
|
||||
@@ -0,0 +1,30 @@
|
||||
#include "platform_v2/impl/shared/posix_condition_variable.h"
|
||||
|
||||
namespace location {
|
||||
namespace nearby {
|
||||
namespace posix {
|
||||
|
||||
ConditionVariable::ConditionVariable(Mutex* mutex)
|
||||
: mutex_(mutex), attr_(), cond_() {
|
||||
pthread_condattr_init(&attr_);
|
||||
|
||||
pthread_cond_init(&cond_, &attr_);
|
||||
}
|
||||
|
||||
ConditionVariable::~ConditionVariable() {
|
||||
pthread_cond_destroy(&cond_);
|
||||
|
||||
pthread_condattr_destroy(&attr_);
|
||||
}
|
||||
|
||||
void ConditionVariable::Notify() { pthread_cond_broadcast(&cond_); }
|
||||
|
||||
Exception ConditionVariable::Wait() {
|
||||
pthread_cond_wait(&cond_, &(mutex_->mutex_));
|
||||
|
||||
return {Exception::kSuccess};
|
||||
}
|
||||
|
||||
} // namespace posix
|
||||
} // namespace nearby
|
||||
} // namespace location
|
||||
@@ -0,0 +1,31 @@
|
||||
#ifndef PLATFORM_V2_IMPL_SHARED_POSIX_CONDITION_VARIABLE_H_
|
||||
#define PLATFORM_V2_IMPL_SHARED_POSIX_CONDITION_VARIABLE_H_
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
#include "platform_v2/api/condition_variable.h"
|
||||
#include "platform_v2/impl/shared/posix_mutex.h"
|
||||
|
||||
namespace location {
|
||||
namespace nearby {
|
||||
namespace posix {
|
||||
|
||||
class ConditionVariable : public api::ConditionVariable {
|
||||
public:
|
||||
explicit ConditionVariable(Mutex* mutex);
|
||||
~ConditionVariable() override;
|
||||
|
||||
void Notify() override;
|
||||
Exception Wait() override;
|
||||
|
||||
private:
|
||||
Mutex* mutex_;
|
||||
pthread_condattr_t attr_;
|
||||
pthread_cond_t cond_;
|
||||
};
|
||||
|
||||
} // namespace posix
|
||||
} // namespace nearby
|
||||
} // namespace location
|
||||
|
||||
#endif // PLATFORM_V2_IMPL_SHARED_POSIX_CONDITION_VARIABLE_H_
|
||||
@@ -0,0 +1,26 @@
|
||||
#include "platform_v2/impl/shared/posix_mutex.h"
|
||||
|
||||
namespace location {
|
||||
namespace nearby {
|
||||
namespace posix {
|
||||
|
||||
Mutex::Mutex() : attr_(), mutex_() {
|
||||
pthread_mutexattr_init(&attr_);
|
||||
pthread_mutexattr_settype(&attr_, PTHREAD_MUTEX_RECURSIVE);
|
||||
|
||||
pthread_mutex_init(&mutex_, &attr_);
|
||||
}
|
||||
|
||||
Mutex::~Mutex() {
|
||||
pthread_mutex_destroy(&mutex_);
|
||||
|
||||
pthread_mutexattr_destroy(&attr_);
|
||||
}
|
||||
|
||||
void Mutex::Lock() { pthread_mutex_lock(&mutex_); }
|
||||
|
||||
void Mutex::Unlock() { pthread_mutex_unlock(&mutex_); }
|
||||
|
||||
} // namespace posix
|
||||
} // namespace nearby
|
||||
} // namespace location
|
||||
@@ -0,0 +1,31 @@
|
||||
#ifndef PLATFORM_V2_IMPL_SHARED_POSIX_MUTEX_H_
|
||||
#define PLATFORM_V2_IMPL_SHARED_POSIX_MUTEX_H_
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
#include "platform_v2/api/mutex.h"
|
||||
|
||||
namespace location {
|
||||
namespace nearby {
|
||||
namespace posix {
|
||||
|
||||
class ABSL_LOCKABLE Mutex : public api::Mutex {
|
||||
public:
|
||||
Mutex();
|
||||
~Mutex() override;
|
||||
|
||||
void Lock() ABSL_EXCLUSIVE_LOCK_FUNCTION() override;
|
||||
void Unlock() ABSL_UNLOCK_FUNCTION() override;
|
||||
|
||||
private:
|
||||
friend class ConditionVariable;
|
||||
|
||||
pthread_mutexattr_t attr_;
|
||||
pthread_mutex_t mutex_;
|
||||
};
|
||||
|
||||
} // namespace posix
|
||||
} // namespace nearby
|
||||
} // namespace location
|
||||
|
||||
#endif // PLATFORM_V2_IMPL_SHARED_POSIX_MUTEX_H_
|
||||
Reference in New Issue
Block a user