6 #ifndef BITCOIN_SUPPORT_PAGELOCKER_H 7 #define BITCOIN_SUPPORT_PAGELOCKER_H 13 #include <boost/thread/mutex.hpp> 14 #include <boost/thread/once.hpp> 27 template <
class Locker>
46 boost::mutex::scoped_lock lock(
mutex);
49 const size_t base_addr =
reinterpret_cast<size_t>(
p);
50 const size_t start_page = base_addr &
page_mask;
51 const size_t end_page = (base_addr + size - 1) &
page_mask;
52 for (
size_t page = start_page; page <= end_page; page +=
page_size) {
53 Histogram::iterator it =
histogram.find(page);
57 histogram.insert(std::make_pair(page, 1));
68 boost::mutex::scoped_lock lock(
mutex);
71 const size_t base_addr =
reinterpret_cast<size_t>(
p);
72 const size_t start_page = base_addr &
page_mask;
73 const size_t end_page = (base_addr + size - 1) &
page_mask;
74 for (
size_t page = start_page; page <= end_page; page +=
page_size) {
75 Histogram::iterator it =
histogram.find(page);
91 boost::mutex::scoped_lock lock(
mutex);
115 bool Lock(
const void* addr,
size_t len);
119 bool Unlock(
const void* addr,
size_t len);
164 template <
typename T>
170 template <
typename T>
177 #endif // BITCOIN_SUPPORT_PAGELOCKER_H
static LockedPageManager * _instance
std::map< size_t, int > Histogram
bool Unlock(const void *addr, size_t len)
void UnlockObject(const T &t)
void memory_cleanse(void *ptr, size_t len)
void LockRange(void *p, size_t size)
LockedPageManagerBase(size_t page_size)
bool Lock(const void *addr, size_t len)
void UnlockRange(void *p, size_t size)
static void CreateInstance()
static LockedPageManager & Instance()
static boost::once_flag init_flag
void LockObject(const T &t)