33bool Block::TryLockForWrite() {
36 std::memory_order_acq_rel,
37 std::memory_order_relaxed)) {
38 ADEBUG <<
"lock num: " << lock_num_.load();
44bool Block::TryLockForRead() {
45 int32_t lock_num = lock_num_.load();
47 AINFO <<
"block is being written.";
51 int32_t try_times = 0;
52 while (!lock_num_.compare_exchange_weak(lock_num, lock_num + 1,
53 std::memory_order_acq_rel,
54 std::memory_order_relaxed)) {
57 AINFO <<
"fail to add read lock num, curr num: " << lock_num;
61 lock_num = lock_num_.load();
63 AINFO <<
"block is being written.";
71void Block::ReleaseWriteLock() { lock_num_.fetch_add(1); }
73void Block::ReleaseReadLock() { lock_num_.fetch_sub(1); }
static const int32_t kRWLockFree
static const int32_t kWriteExclusive
static const int32_t kMaxTryLockTimes