У меня следующее описание проблемы
У вас есть программа, которая распараллелена и использует «n» независимых потоков для обработки заданного списка «m» заданий.Потоки принимают задания в том порядке, в котором они указаны во входных данных.Если есть свободная тема, она немедленно берет следующую работу из списка.Если поток начал обработку задания, он не прерывается и не останавливается, пока не завершит обработку задания.Если несколько потоков пытаются получить задания из списка одновременно, то поток с меньшим индексом принимает работу.Для каждого задания вы точно знаете, сколько времени потребуется любому потоку для его обработки, и это время одинаково для всех потоков.Вам необходимо определить для каждого задания, какой поток его обработает, и когда он начнет обработку.
Формат ввода.Первая строка содержит целые числа «n» и «m». Вторая строка содержит «целые числа» - время в секундах, которое требуется любому потоку для обработки to-го задания.Время указывается в том же порядке, что и в списке, из которого потоки выполняют задания.Потоки индексируются, начиная с 0.
Если у меня есть следующий ввод
4 20
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Для приведенного выше кода у меня есть следующий код
struct qThreadDetails {
std::uint64_t m_uiThreadId;
std::uint64_t m_availableTime;
std::uint64_t m_counter;
};
struct qThreadCompare {
bool operator()(const qThreadDetails & lhs, const qThreadDetails & rhs) const {
if(lhs.m_availableTime < rhs.m_availableTime ) {
if (lhs.m_uiThreadId < rhs.m_uiThreadId) {
return false;
}
}
if (lhs.m_availableTime < rhs.m_availableTime ) {
return false;
}
return true;
}
};
std::priority_queue<qThreadDetails, std::vector<qThreadDetails>, qThreadCompare > m_queThreads;
if (m_vecJobTimes.size() > 0) {
m_vecAssignedWorkers.push_back(0);
m_vecStartTimes.push_back(0);
qThreadDetails jobDetails;
// push job in queue.
jobDetails.m_uiThreadId = 0;
jobDetails.m_availableTime = m_vecJobTimes[0];
jobDetails.m_counter = 0;
m_queThreads.push(jobDetails);
}
unsigned int uiVecStartTimesIdx = 1;
for(unsigned int i = 1; i < m_uiNoOfThreads && uiVecStartTimesIdx < m_vecJobTimes.size();
++i, uiVecStartTimesIdx++) {
m_vecAssignedWorkers.push_back(i);
m_vecStartTimes.push_back(0);
// push jobs in queue.
qThreadDetails jobDetails;
jobDetails.m_uiThreadId = i;
jobDetails.m_counter = 0;
jobDetails.m_availableTime = m_vecJobTimes[i];
m_queThreads.push(jobDetails); // ---------> problem here
}
Это сбой недопустимого оператора <.не уверен почему.Для ввода приведенного выше.Любая помощь </p>