594 memset(new_claims, Unclaimed, sizeof(*_claims) * _n_regions);
595 _claims = new_claims;
596 }
597
598 HeapRegionClaimer::~HeapRegionClaimer() {
599 FREE_C_HEAP_ARRAY(uint, _claims);
600 }
601
602 uint HeapRegionClaimer::offset_for_worker(uint worker_id) const {
603 assert(worker_id < _n_workers, "Invalid worker_id.");
604 return _n_regions * worker_id / _n_workers;
605 }
606
607 bool HeapRegionClaimer::is_region_claimed(uint region_index) const {
608 assert(region_index < _n_regions, "Invalid index.");
609 return _claims[region_index] == Claimed;
610 }
611
612 bool HeapRegionClaimer::claim_region(uint region_index) {
613 assert(region_index < _n_regions, "Invalid index.");
614 uint old_val = Atomic::cmpxchg(Claimed, &_claims[region_index], Unclaimed);
615 return old_val == Unclaimed;
616 }
|
594 memset(new_claims, Unclaimed, sizeof(*_claims) * _n_regions);
595 _claims = new_claims;
596 }
597
598 HeapRegionClaimer::~HeapRegionClaimer() {
599 FREE_C_HEAP_ARRAY(uint, _claims);
600 }
601
602 uint HeapRegionClaimer::offset_for_worker(uint worker_id) const {
603 assert(worker_id < _n_workers, "Invalid worker_id.");
604 return _n_regions * worker_id / _n_workers;
605 }
606
607 bool HeapRegionClaimer::is_region_claimed(uint region_index) const {
608 assert(region_index < _n_regions, "Invalid index.");
609 return _claims[region_index] == Claimed;
610 }
611
612 bool HeapRegionClaimer::claim_region(uint region_index) {
613 assert(region_index < _n_regions, "Invalid index.");
614 uint old_val = Atomic::cmpxchg(&_claims[region_index], Unclaimed, Claimed);
615 return old_val == Unclaimed;
616 }
|