void enterMeasurement() const{ l4_utcb_t * utcb = l4_utcb(); _lock.enter(); while(!_locked.empty() && (_measuring.find(utcb) == _measuring.end())){ _lock.leave(); l4_sleep(0); _lock.enter(); } ++_measuring[utcb]; _lock.leave(); }
void enterExclusive() const { l4_utcb_t * utcb = l4_utcb(); _lock.enter(); while(!_locked.empty() && _locked.find(utcb) == _locked.end()){ _lock.leave(); l4_sleep(0); _lock.enter(); } ++_locked[utcb]; while(!_measuring.empty()){ _lock.leave(); l4_sleep(0); _lock.enter(); } _lock.leave(); }
void addMeasurement(const l4_uint32_t id, l4_uint64_t value){ GET_STATS.enterMeasurement(); _item_map_mutex.enter(); item_map_t::iterator iter = _item_map.find(id); _item_map_mutex.leave(); if(iter != _item_map.end()){ iter->second.addMeasurement(value); } else { _item_map_mutex.enter(); Item & item = _item_map[id]; _item_map_mutex.leave(); item.addMeasurement(value); std::stringstream s; s << "0x" << std::hex << id; item.setName(s.str()); } GET_STATS.leaveMeasurement(); }
void leaveMeasurement() const{ l4_utcb_t * utcb = l4_utcb(); _lock.enter(); if(--_measuring[utcb] == 0) _measuring.erase(utcb); _lock.leave(); }
void leaveExclusive() const{ l4_utcb_t * utcb = l4_utcb(); _lock.enter(); if(--_locked[utcb] == 0) _locked.erase(utcb); _lock.leave(); }