| 109 | return ret; |
| 110 | } |
| 111 | SubgraphTask* GenericDevExecutor::PopQueue(QueueType queue_type) |
| 112 | { |
| 113 | std::mutex* p_mutex = nullptr; |
| 114 | task_queue_t* p_queue = nullptr; |
| 115 | |
| 116 | if(!GetQueueReference(queue_type, p_mutex, p_queue)) |
| 117 | return nullptr; |
| 118 | |
| 119 | Lock(*p_mutex); |
| 120 | |
| 121 | auto ir = p_queue->begin(); |
| 122 | |
| 123 | if(ir == p_queue->end()) |
| 124 | { |
| 125 | Unlock(*p_mutex); |
| 126 | return nullptr; |
| 127 | } |
| 128 | |
| 129 | auto set_ir = ir->second.begin(); |
| 130 | |
| 131 | SubgraphTask* task = *set_ir; |
| 132 | |
| 133 | ir->second.erase(set_ir); |
| 134 | |
| 135 | if(ir->second.empty()) |
| 136 | { |
| 137 | p_queue->erase(ir); |
| 138 | } |
| 139 | |
| 140 | Unlock(*p_mutex); |
| 141 | return task; |
| 142 | } |
| 143 | int GenericDevExecutor::GetElementNumber(QueueType queue_type) |
| 144 | { |
| 145 | std::mutex* p_mutex; |