[Avida-SVN] r2604 - development/source/analyze
brysonda at myxo.css.msu.edu
brysonda at myxo.css.msu.edu
Fri May 30 12:04:50 PDT 2008
Author: brysonda
Date: 2008-05-30 15:04:50 -0400 (Fri, 30 May 2008)
New Revision: 2604
Modified:
development/source/analyze/cAnalyzeJobQueue.cc
development/source/analyze/cAnalyzeJobQueue.h
Log:
Adjust cAnalyzeJobQueue to completely disable threaded workers when limited to a single cpu. This should fix analyze mode under Visual Studio.
Modified: development/source/analyze/cAnalyzeJobQueue.cc
===================================================================
--- development/source/analyze/cAnalyzeJobQueue.cc 2008-05-30 18:51:23 UTC (rev 2603)
+++ development/source/analyze/cAnalyzeJobQueue.cc 2008-05-30 19:04:50 UTC (rev 2604)
@@ -3,7 +3,7 @@
* Avida
*
* Created by David on 2/18/06.
- * Copyright 2006-2007 Michigan State University. All rights reserved.
+ * Copyright 2006-2008 Michigan State University. All rights reserved.
*
*
* This program is free software; you can redistribute it and/or
@@ -42,9 +42,13 @@
m_rng_pool[i] = new cRandomMT(world->GetRandom().GetInt(0x7FFFFFFF));
}
- for (int i = 0; i < m_workers.GetSize(); i++) {
- m_workers[i] = new cAnalyzeJobWorker(this);
- m_workers[i]->Start();
+ if (m_workers.GetSize() > 1) {
+ for (int i = 0; i < m_workers.GetSize(); i++) {
+ m_workers[i] = new cAnalyzeJobWorker(this);
+ m_workers[i]->Start();
+ }
+ } else {
+ m_workers.Resize(0);
}
}
@@ -72,11 +76,17 @@
}
}
+inline void cAnalyzeJobQueue::queueJob(cAnalyzeJob* job)
+{
+ if (m_workers.GetSize()) m_queue.PushRear(job);
+ else singleThreadedJobExecution(job);
+}
+
void cAnalyzeJobQueue::AddJob(cAnalyzeJob* job)
{
cMutexAutoLock lock(m_mutex);
job->SetID(m_last_jobid++);
- m_queue.PushRear(job);
+ queueJob(job);
m_jobs++;
}
@@ -84,7 +94,7 @@
{
m_mutex.Lock();
job->SetID(m_last_jobid++);
- m_queue.PushRear(job);
+ queueJob(job);
m_jobs++;
m_mutex.Unlock(); // should unlock prior to signaling condition variable
m_cond.Signal();
@@ -117,3 +127,11 @@
if (m_world->GetVerbosity() >= VERBOSE_DETAILS)
m_world->GetDriver().NotifyComment("job queue complete");
}
+
+void cAnalyzeJobQueue::singleThreadedJobExecution(cAnalyzeJob* job)
+{
+ cAvidaContext ctx(NULL);
+ ctx.SetRandom(GetRandom(job->GetID()));
+ job->Run(ctx);
+ delete job;
+}
\ No newline at end of file
Modified: development/source/analyze/cAnalyzeJobQueue.h
===================================================================
--- development/source/analyze/cAnalyzeJobQueue.h 2008-05-30 18:51:23 UTC (rev 2603)
+++ development/source/analyze/cAnalyzeJobQueue.h 2008-05-30 19:04:50 UTC (rev 2604)
@@ -70,6 +70,10 @@
tArray<cAnalyzeJobWorker*> m_workers;
+
+ void singleThreadedJobExecution(cAnalyzeJob* job);
+ inline void queueJob(cAnalyzeJob* job);
+
cAnalyzeJobQueue(); // @not_implemented
cAnalyzeJobQueue(const cAnalyzeJobQueue&); // @not_implemented
More information about the Avida-cvs
mailing list