added thread private test

This commit is contained in:
Jeff Hill
2001-03-28 15:49:25 +00:00
parent 34ea7db15b
commit 8b782cd6bb
3 changed files with 92 additions and 0 deletions

View File

@@ -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 );
}