本文整理汇总了C++中Directory::findEntry方法的典型用法代码示例。如果您正苦于以下问题:C++ Directory::findEntry方法的具体用法?C++ Directory::findEntry怎么用?C++ Directory::findEntry使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Directory
的用法示例。
在下文中一共展示了Directory::findEntry方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: queue
/*!
* \brief Enqueue a work descriptor in the readyQueue of the passed thread
* \param thread pointer to the thread to which readyQueue the task must be appended
* \param wd a reference to the work descriptor to be enqueued
* \sa ThreadData, WD and BaseThread
*/
virtual void queue ( BaseThread *thread, WD &wd )
{
ThreadData &data = ( ThreadData & ) *thread->getTeamData()->getScheduleData();
if ( !data._init ) {
data._cacheId = thread->runningOn()->getMemorySpaceId();
data._init = true;
}
TeamData &tdata = (TeamData &) *thread->getTeam()->getScheduleData();
if ( wd.isTied() ) {
unsigned int index = wd.isTiedTo()->runningOn()->getMemorySpaceId();
tdata._readyQueues[index].push_front ( &wd );
return;
}
if ( wd.getNumCopies() > 0 ){
unsigned int numCaches = sys.getCacheMap().getSize();
unsigned int ranks[numCaches];
for (unsigned int i = 0; i < numCaches; i++ ) {
ranks[i] = 0;
}
CopyData * copies = wd.getCopies();
for ( unsigned int i = 0; i < wd.getNumCopies(); i++ ) {
if ( !copies[i].isPrivate() ) {
WorkDescriptor* parent = wd.getParent();
if ( parent != NULL ) {
Directory *dir = parent->getDirectory();
if ( dir != NULL ) {
DirectoryEntry *de = dir->findEntry(copies[i].getAddress());
if ( de != NULL ) {
for ( unsigned int j = 0; j < numCaches; j++ ) {
ranks[j]+=((unsigned int)(de->getAccess( j+1 ) > 0))*copies[i].getSize();
}
}
}
}
}
}
unsigned int winner = 0;
unsigned int maxRank = 0;
for ( unsigned int i = 0; i < numCaches; i++ ) {
if ( ranks[i] > maxRank ) {
winner = i+1;
maxRank = ranks[i];
}
}
tdata._readyQueues[winner].push_front( &wd );
} else {
tdata._readyQueues[0].push_front ( &wd );
}
}