Folly 的 MicroLock 使用方法和实现
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
状态。
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: