equal
deleted
inserted
replaced
51 : _cht(cht), _next_to_claim(0), _task_size_log2(DEFAULT_TASK_SIZE_LOG2), |
51 : _cht(cht), _next_to_claim(0), _task_size_log2(DEFAULT_TASK_SIZE_LOG2), |
52 _stop_task(0), _size_log2(0), _is_mt(is_mt) {} |
52 _stop_task(0), _size_log2(0), _is_mt(is_mt) {} |
53 |
53 |
54 // Returns true if you succeeded to claim the range start -> (stop-1). |
54 // Returns true if you succeeded to claim the range start -> (stop-1). |
55 bool claim(size_t* start, size_t* stop) { |
55 bool claim(size_t* start, size_t* stop) { |
56 size_t claimed = Atomic::add((size_t)1, &_next_to_claim) - 1; |
56 size_t claimed = Atomic::add(&_next_to_claim, (size_t)1) - 1; |
57 if (claimed >= _stop_task) { |
57 if (claimed >= _stop_task) { |
58 return false; |
58 return false; |
59 } |
59 } |
60 *start = claimed * (((size_t)1) << _task_size_log2); |
60 *start = claimed * (((size_t)1) << _task_size_log2); |
61 *stop = ((*start) + (((size_t)1) << _task_size_log2)); |
61 *stop = ((*start) + (((size_t)1) << _task_size_log2)); |