| 47 | } |
| 48 | |
| 49 | inline void sync(HighsSplitDeque* localDeque) { |
| 50 | std::pair<HighsSplitDeque::Status, HighsTask*> popResult = localDeque->pop(); |
| 51 | switch (popResult.first) { |
| 52 | case HighsSplitDeque::Status::kEmpty: |
| 53 | assert(false); |
| 54 | // fall through |
| 55 | case HighsSplitDeque::Status::kOverflown: |
| 56 | // when the local deque is overflown the task has been executed during |
| 57 | // spawn already |
| 58 | break; |
| 59 | case HighsSplitDeque::Status::kStolen: |
| 60 | HighsTaskExecutor::sync_stolen_task(localDeque, popResult.second); |
| 61 | break; |
| 62 | case HighsSplitDeque::Status::kWork: |
| 63 | popResult.second->run(); |
| 64 | } |
| 65 | } |
| 66 | |
| 67 | inline void sync() { sync(HighsTaskExecutor::getThisWorkerDeque()); } |
| 68 | class TaskGroup { |