示例#1
0
// GetDistributableJobToRace
//------------------------------------------------------------------------------
Job * JobQueue::GetDistributableJobToRace()
{
	MutexHolder m( m_DistributedJobsMutex );
	if ( m_DistributedJobsRemote.IsEmpty() )
	{
		return nullptr;
	}

	// take newest job, which is least likely to finish first
	// compared to older distributed jobs
	Job * job = m_DistributedJobsRemote.Top();
	m_DistributedJobsRemote.Pop();
	m_DistributedJobsBeingRaced.Append( job );

	// TODO:B We should defer the remote cancellation
	// to have a proper race
	CancelledJob c( job, job->GetJobId() );
	m_DistributedJobsCancelled.Append( c );

	return job;
}