我有以下问题描述
您有一个并行化的程序并使用" n"处理给定列表的独立线程" m" 工作。线程按照输入中给出的顺序执行作业。如果有一个免费的线程,它立即 接受列表中的下一个工作。如果线程已开始处理作业,则不会中断或停止 直到它完成处理工作。如果多个线程试图同时从列表中取出作业,那么 具有较小索引的线程接受该作业。对于每个工作,您确切知道任何线程需要多长时间 处理这个工作,这个时间对于所有线程都是一样的。您需要确定每项工作 哪个线程将处理它以及何时开始处理。
输入格式。输入的第一行包含整数" n"和" m" 第二行包含整数 - 任何线程处理第一个作业所需的时间(以秒为单位)。 时间的顺序与线程从中获取作业的顺序相同。 线程从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
}
崩溃无效的运营商&lt; 。不知道为什么。对于上面给出的输入。任何帮助