Pre-Vista leveldb::port::InitOnce implementation

This commit is contained in:
Pieter Wuille
2012-12-12 02:20:18 +01:00
committed by Gavin Andresen
parent 21f2ae7563
commit 960797a0de
2 changed files with 21 additions and 8 deletions

View File

@@ -93,8 +93,26 @@ class CondVar {
};
typedef void* OnceType;
#define LEVELDB_ONCE_INIT 0
class OnceType {
public:
// OnceType() : init_(false) {}
OnceType(const OnceType &once) : init_(once.init_) {}
OnceType(bool f) : init_(f) {}
void InitOnce(void (*initializer)()) {
mutex_.Lock();
if (!init_) {
init_ = true;
initializer();
}
mutex_.Unlock();
}
private:
bool init_;
Mutex mutex_;
};
#define LEVELDB_ONCE_INIT false
extern void InitOnce(port::OnceType*, void (*initializer)());
// Storage for a lock-free pointer