• Log in
Anwen  Share and Create
  • Book
  • Movies
  • Music
  • SF
  • Goodlink
  • Asks
  • Eyeopen
  • Create

Folly 的 MicroLock 使用方法和实现

Sharer: 阅微堂 November 29, 2019 at 11:00 pm
Link Share :https://zhiqiang.org/coding/folly-micro-lock.html - via RSS

由 Facebook 开发和维护的 C++库 Folly 提供了锁folly::MicroLock,代码文件地址:https://github.com/facebook/folly/blob/master/folly/MicroLock.h。

folly::MicroLock小到只有一个字节,并且为POD类型。

根据 Facebook 的测试,该锁单次耗时约 27ns ,略高于std::mutex的 25ns ,参考的虚函数单次调用耗时约 1.7ns。不过既然还慢于std::mutex,那么MicroLock存在的价值是什么呢?

它的价值在于它很小,小到只有一个字节,却可以提供 4 个锁。每个锁占用 2 个位。如果只用最开头的一个锁,那么它可以小到 2 个位,这样可以共享其它数据的低位,比如指针(由于数据按 4 位对齐,对于大多数指针的末两位都是 0 ):

union Pointer {
  folly::MicroLock lock;
  void* _ptr;

  void* get_ptr() const {
    return _ptr & ~(3);
  }

  void set_ptr(void* ptr) {
    _ptr = ptr | (_ptr & 3);
  }

  void lock() {
    lock.lock();
  }

  void unlock() {
    lock.unlock();
  }
}

为什么一个锁需要两个位,还没看明白。似乎是一个位保存hold状态,另一个位保存wait状态。

作者暂无likerid, 赞赏暂由本网站代持,当作者有likerid后会全部转账给作者(我们会尽力而为)。

Tips: Until now, everytime you want to store your article, we will help you store it in Filecoin network. In the future, you can store it in Filecoin network using your own filecoin.


Support author:
Author's Filecoin address:
Or you can use Likecoin to support author:
tags:编程 folly 自旋锁 多线程编程 C++

0 0

2012-2018 Anwen All of our posts are default licensed under CC BY 4.0 About Help Changelog Telegram
Today Quote: 「最重要的自由,是成為真正的你。」– 吉姆·莫里森 (歌手)
“The most important kind of freedom is to be what you really are.” – Jim Morrison, Singer