diff options
author | Arne H Juul <arnej@yahoo-inc.com> | 2016-06-30 12:32:06 +0200 |
---|---|---|
committer | Arne H Juul <arnej@yahoo-inc.com> | 2016-06-30 12:32:06 +0200 |
commit | 84231cd1e4321779202f5dd2188d505f0b77501e (patch) | |
tree | 49a343131efce1b28d5fc2ef5279d1f767b044b6 /fastos/src/tests/thread_sleep_test.cpp | |
parent | 141b92cbe0db97b28430a150c218d66455ba6398 (diff) |
move common code to new base class
Diffstat (limited to 'fastos/src/tests/thread_sleep_test.cpp')
-rw-r--r-- | fastos/src/tests/thread_sleep_test.cpp | 223 |
1 files changed, 2 insertions, 221 deletions
diff --git a/fastos/src/tests/thread_sleep_test.cpp b/fastos/src/tests/thread_sleep_test.cpp index 25cd6f6095b..0fe94a81467 100644 --- a/fastos/src/tests/thread_sleep_test.cpp +++ b/fastos/src/tests/thread_sleep_test.cpp @@ -4,62 +4,10 @@ #include <vespa/fastos/fastos.h> #include "tests.h" #include "jobs.h" +#include "base_thread.hpp" -static volatile int64_t number; -#define INCREASE_NUMBER_AMOUNT 10000 - -#define MUTEX_TEST_THREADS 6 -#define MAX_THREADS 7 - - -class ThreadTest : public BaseTest, public FastOS_Runnable +class ThreadTest : public BaseForThreadTest { -private: - FastOS_Mutex printMutex; - -public: - ThreadTest(void) - : printMutex() - { - } - virtual ~ThreadTest() {}; - - void PrintProgress (char *string) - { - printMutex.Lock(); - BaseTest::PrintProgress(string); - printMutex.Unlock(); - } - - void Run (FastOS_ThreadInterface *thread, void *arg); - - void WaitForThreadsToFinish (Job *jobs, int count) - { - int i; - - Progress(true, "Waiting for threads to finish..."); - for(;;) - { - bool threadsFinished=true; - - for(i=0; i<count; i++) - { - if(jobs[i].result == -1) - { - threadsFinished = false; - break; - } - } - - FastOS_Thread::Sleep(500); - - if(threadsFinished) - break; - } - - Progress(true, "Threads finished"); - } - int Main (); void CreateSingleThread () @@ -84,7 +32,6 @@ public: delete(pool); PrintSeparator(); } - }; int ThreadTest::Main () @@ -100,172 +47,6 @@ int ThreadTest::Main () return 0; } -volatile int busyCnt; - -void ThreadTest::Run (FastOS_ThreadInterface *thread, void *arg) -{ - if(arg == NULL) - return; - - Job *job = static_cast<Job *>(arg); - char someStack[15*1024]; - - memset(someStack, 0, 15*1024); - - switch(job->code) - { - case SILENTNOP: - { - job->result = 1; - break; - } - - case NOP: - { - Progress(true, "Doing NOP"); - job->result = 1; - break; - } - - case PRINT_MESSAGE_AND_WAIT3SEC: - { - Progress(true, "Thread printing message: [%s]", job->message); - job->result = strlen(job->message); - - FastOS_Thread::Sleep(3000); - break; - } - - case INCREASE_NUMBER: - { - int result; - - if(job->mutex != NULL) - job->mutex->Lock(); - - result = static_cast<int>(number); - - int sleepOn = (INCREASE_NUMBER_AMOUNT/2) * 321/10000; - for(int i=0; i<(INCREASE_NUMBER_AMOUNT/2); i++) - { - number = number + 2; - - if(i == sleepOn) - FastOS_Thread::Sleep(1000); - } - - if(job->mutex != NULL) - job->mutex->Unlock(); - - job->result = result; // This marks the end of the thread - - break; - } - - case WAIT_FOR_BREAK_FLAG: - { - for(;;) - { - FastOS_Thread::Sleep(1000); - - if(thread->GetBreakFlag()) - { - Progress(true, "Thread %p got breakflag", thread); - break; - } - } - break; - } - - case WAIT_FOR_THREAD_TO_FINISH: - { - if(job->mutex) - job->mutex->Lock(); - - if(job->otherThread != NULL) - job->otherThread->Join(); - - if(job->mutex) - job->mutex->Unlock(); - break; - } - - case WAIT_FOR_CONDITION: - { - job->condition->Lock(); - - job->result = 1; - - job->condition->Wait(); - job->condition->Unlock(); - - job->result = 0; - - break; - } - - case BOUNCE_CONDITIONS: - { - while (!thread->GetBreakFlag()) { - job->otherjob->condition->Lock(); - job->otherjob->bouncewakeupcnt++; - job->otherjob->bouncewakeup = true; - job->otherjob->condition->Signal(); - job->otherjob->condition->Unlock(); - - job->condition->Lock(); - while (!job->bouncewakeup) - job->condition->TimedWait(1); - job->bouncewakeup = false; - job->condition->Unlock(); - } - break; - } - - case TEST_ID: - { - job->mutex->Lock(); // Initially the parent threads owns the lock - job->mutex->Unlock(); // It is unlocked when we should start - - FastOS_ThreadId currentId = FastOS_Thread::GetCurrentThreadId(); - - if(currentId == job->_threadId) - job->result = 1; - else - job->result = -1; - break; - } - - case WAIT2SEC_AND_SIGNALCOND: - { - FastOS_Thread::Sleep(2000); - job->condition->Signal(); - job->result = 1; - break; - } - - case HOLD_MUTEX_FOR2SEC: - { - job->mutex->Lock(); - FastOS_Thread::Sleep(2000); - job->mutex->Unlock(); - job->result = 1; - break; - } - - case WAIT_2_SEC: - { - FastOS_Thread::Sleep(2000); - job->result = 1; - break; - } - - default: - Progress(false, "Unknown jobcode"); - break; - } -} - int main (int argc, char **argv) { ThreadTest app; |