31 int attr_ret = ::pthread_mutexattr_init(&attr_);
34 int shared_ret = ::pthread_mutexattr_setpshared(&attr_, PTHREAD_PROCESS_SHARED);
37 int type_ret = ::pthread_mutexattr_settype(
39 recursive ? PTHREAD_MUTEX_RECURSIVE_NP : PTHREAD_MUTEX_FAST_NP);
42 int mutex_ret = ::pthread_mutex_init(&mutex_, &attr_);
45 recursive_ = recursive;
54 int mutex_ret = ::pthread_mutex_destroy(&mutex_);
57 int attr_ret = ::pthread_mutexattr_destroy(&attr_);
65 int ret = ::pthread_mutex_lock(&mutex_);
70 if (timeout_nanosec == 0) {
75 struct timespec timeout;
78 timeout.tv_sec = now.tv_sec + (timeout_nanosec / 1000000000ULL);
79 timeout.tv_nsec = now.tv_usec * 1000ULL + timeout_nanosec % 1000000000ULL;
80 timeout.tv_sec += (timeout.tv_nsec) / 1000000000ULL;
81 timeout.tv_nsec %= 1000000000ULL;
82 int ret = ::pthread_mutex_timedlock(&mutex_, &timeout);
89 int ret = ::pthread_mutex_trylock(&mutex_);
95 int ret = ::pthread_mutex_unlock(&mutex_);
105 locked_by_me_ =
true;
109 if (!locked_by_me_) {
114 locked_by_me_ =
false;
bool timedlock(uint64_t timeout_nanosec)
Try lock up to the given timeout.
#define CXX11_NULLPTR
Used in public headers in place of "nullptr" of C++11.
void initialize(bool recursive=false)
Root package of FOEDUS (Fast Optimistic Engine for Data Unification Services).
bool trylock()
Instantaneously try the lock.
void lock()
Unconditionally lock.
#define ASSERT_ND(x)
A warning-free wrapper macro of assert() that has no performance effect in release mode even when 'x'...