From 8b782cd6bb15493ed0d33a65d50ba778702d47fc Mon Sep 17 00:00:00 2001 From: Jeff Hill Date: Wed, 28 Mar 2001 15:49:25 +0000 Subject: [PATCH] added thread private test --- src/libCom/test/Makefile | 4 + src/libCom/test/epicsThreadPrivateTest.cpp | 76 +++++++++++++++++++ .../test/epicsThreadPrivateTestMain.cpp | 12 +++ 3 files changed, 92 insertions(+) create mode 100644 src/libCom/test/epicsThreadPrivateTest.cpp create mode 100644 src/libCom/test/epicsThreadPrivateTestMain.cpp diff --git a/src/libCom/test/Makefile b/src/libCom/test/Makefile index 2c54b85a3..edf1cce36 100644 --- a/src/libCom/test/Makefile +++ b/src/libCom/test/Makefile @@ -22,6 +22,10 @@ epicsThreadTestHost_SRCS += epicsThreadTestMain.cpp epicsThreadTest.cpp PROD += epicsThreadTestHost OBJS_IOC += epicsThreadTest +epicsThreadPrivateTestHost_SRCS += epicsThreadPrivateTestMain.cpp epicsThreadPrivateTest.cpp +PROD += epicsThreadPrivateTestHost +OBJS_IOC += epicsThreadPrivateTest + timerTestHost_SRCS += timerTestMain.c timerTest.c PROD += timerTestHost OBJS_IOC += timerTest diff --git a/src/libCom/test/epicsThreadPrivateTest.cpp b/src/libCom/test/epicsThreadPrivateTest.cpp new file mode 100644 index 000000000..9a8cc71ce --- /dev/null +++ b/src/libCom/test/epicsThreadPrivateTest.cpp @@ -0,0 +1,76 @@ +/* $Id$ */ + +/* Author: Jeff Hill Date: March 28 2001 */ + + +#include "epicsTime.h" +#include "epicsThread.h" +#include "epicsAssert.h" + +static bool doneFlag = false; +void epicsThreadPrivateTestThread ( void *pParm ) +{ + epicsThreadPrivateId id = static_cast < epicsThreadPrivateId > ( pParm ); + assert ( 0 == epicsThreadPrivateGet ( id ) ); + doneFlag = true; +} + +inline void callItTenTimes ( const epicsThreadPrivateId &id ) +{ + void *pParm; + pParm = epicsThreadPrivateGet ( id ); + pParm = epicsThreadPrivateGet ( id ); + pParm = epicsThreadPrivateGet ( id ); + pParm = epicsThreadPrivateGet ( id ); + pParm = epicsThreadPrivateGet ( id ); + pParm = epicsThreadPrivateGet ( id ); + pParm = epicsThreadPrivateGet ( id ); + pParm = epicsThreadPrivateGet ( id ); + pParm = epicsThreadPrivateGet ( id ); + pParm = epicsThreadPrivateGet ( id ); +} + +inline void callItTenTimesSquared ( const epicsThreadPrivateId &id ) +{ + callItTenTimes ( id ); + callItTenTimes ( id ); + callItTenTimes ( id ); + callItTenTimes ( id ); + callItTenTimes ( id ); + callItTenTimes ( id ); + callItTenTimes ( id ); + callItTenTimes ( id ); + callItTenTimes ( id ); + callItTenTimes ( id ); +} + +void epicsThreadPrivateTest () +{ + static int var; + epicsThreadPrivateId id = epicsThreadPrivateCreate (); + assert ( id ); + epicsThreadPrivateSet ( id, &var ); + assert ( &var == epicsThreadPrivateGet ( id ) ); + + epicsThreadCreate ( "epicsThreadPrivateTest", epicsThreadPriorityMax, + epicsThreadStackSmall, epicsThreadPrivateTestThread, id ); + while ( ! doneFlag ) { + epicsThreadSleep ( 0.01 ); + } + + epicsThreadPrivateSet ( id, 0 ); + assert ( 0 == epicsThreadPrivateGet ( id ) ); + + epicsTime begin = epicsTime::getCurrent (); + static const unsigned N = 100000u; + for ( unsigned i = 0u; i < N; i++ ) { + callItTenTimesSquared ( id ); + } + double delay = epicsTime::getCurrent() - begin; + delay /= N * 100u; // convert to sec per call + delay *= 1e6; // convert to micro sec + printf ( "It takes %f micro sec to call epicsThreadPrivateGet()\n", delay ); + + epicsThreadPrivateDelete ( id ); +} + diff --git a/src/libCom/test/epicsThreadPrivateTestMain.cpp b/src/libCom/test/epicsThreadPrivateTestMain.cpp new file mode 100644 index 000000000..52f6d083f --- /dev/null +++ b/src/libCom/test/epicsThreadPrivateTestMain.cpp @@ -0,0 +1,12 @@ + +/* $Id$ */ + +/* Author: Jeff Hill Date: March 28 2001 */ + +void epicsThreadPrivateTest (); + +int main () +{ + epicsThreadPrivateTest (); + return 0; +} \ No newline at end of file