Commit 8b74c8a8 authored by Sean McBride's avatar Sean McBride
Browse files

Cleanup of vtkMultiThreader, notably removed ancient HP & SGI options

- removed VTK_HP_PTHREADS & VTK_USE_SPROC options
- Stop #including vtkMultiThreader.h in some places it's not used.
- changed a few int to vtkTypeBool
- fixed some typos
parent 5cf9a0bf
......@@ -359,8 +359,6 @@ TEST_BIG_ENDIAN(CMAKE_WORDS_BIGENDIAN)
include(FindThreads)
set(VTK_USE_WIN32_THREADS 0)
set(VTK_USE_PTHREADS 0)
set(VTK_HP_PTHREADS 0)
set(VTK_USE_SPROC 0)
# if win32 threads and pthreads are available figure out which
# one the compiler is setup to use. If you can not figure it
# out default to pthreads.
......@@ -391,16 +389,11 @@ if(CMAKE_USE_WIN32_THREADS_INIT)
set(CMAKE_THREAD_LIBS_INIT "")
elseif(CMAKE_USE_PTHREADS_INIT)
set(VTK_USE_PTHREADS 1)
if(CMAKE_HP_PTHREADS_INIT)
set(VTK_HP_PTHREADS 1)
endif()
elseif(CMAKE_USE_SPROC_INIT)
set(VTK_USE_SPROC 1)
endif()
set(CMAKE_THREAD_LIBS "${CMAKE_THREAD_LIBS_INIT}" CACHE STRING "Thread library used.")
mark_as_advanced(CMAKE_THREAD_LIBS)
set(VTK_MAX_THREADS "64" CACHE STRING
"Max number of threads vktMultiThreader will allocate.")
"Max number of threads vtkMultiThreader will allocate.")
mark_as_advanced(VTK_MAX_THREADS)
include(CheckTypeSize)
......
......@@ -12,7 +12,6 @@
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
#include "vtkMultiThreader.h"
#include "vtkNew.h"
#include <tbb/blocked_range.h>
......
......@@ -22,7 +22,7 @@ vtkStandardNewMacro(vtkConditionVariable);
# define EAGAIN 35
#endif
#if ! defined(VTK_USE_PTHREADS) && ! defined(VTK_HP_PTHREADS) && ! defined(VTK_USE_WIN32_THREADS)
#if ! defined(VTK_USE_PTHREADS) && ! defined(VTK_USE_WIN32_THREADS)
// Why is this encapsulated in a namespace? Because you can get errors if
// these symbols (particularly the typedef) are already defined. We run
// into this problem on a system that has pthread headers but no libraries
......@@ -59,22 +59,15 @@ int pthread_cond_broadcast( vtkConditionType* cv )
int pthread_cond_wait( vtkConditionType* cv, vtkMutexType* lock )
{
#ifdef VTK_USE_SPROC
release_lock( lock );
#else // VTK_USE_SPROC
*lock = 0;
#endif // VTK_USE_SPROC
while ( ! *cv );
#ifdef VTK_USE_SPROC
spin_lock( lock );
#else // VTK_USE_SPROC
*lock = 1;
#endif // VTK_USE_SPROC
return 0;
}
}
#endif // ! defined(VTK_USE_PTHREADS) && ! defined(VTK_HP_PTHREADS) && ! defined(VTK_USE_WIN32_THREADS)
#endif // ! defined(VTK_USE_PTHREADS) && ! defined(VTK_USE_WIN32_THREADS)
#ifdef VTK_USE_WIN32_THREADS
typedef int pthread_condattr_t;
......@@ -375,9 +368,6 @@ void vtkConditionVariable::PrintSelf( ostream& os, vtkIndent indent )
#ifdef VTK_USE_PTHREADS
<< "pthreads "
#endif
#ifdef VTK_HP_PTHREADS
<< "HP pthreads "
#endif
#ifdef VTK_USE_WIN32_THREADS
<< "win32 threads "
#endif
......
......@@ -35,7 +35,7 @@
#include "vtkMutexLock.h" // Need for friend access to vtkSimpleMutexLock
#if defined(VTK_USE_PTHREADS) || defined(VTK_HP_PTHREADS)
#if defined(VTK_USE_PTHREADS)
# include <pthread.h> // Need POSIX thread implementation of mutex (even win32 provides mutexes)
typedef pthread_cond_t vtkConditionType;
#endif
......@@ -98,12 +98,10 @@ typedef pthread_cond_t vtkConditionType;
#endif // VTK_USE_WIN32_THREADS
#ifndef VTK_USE_PTHREADS
#ifndef VTK_HP_PTHREADS
#ifndef VTK_USE_WIN32_THREADS
typedef int vtkConditionType;
#endif
#endif
#endif
// Condition variable that is not a vtkObject.
class VTKCOMMONCORE_EXPORT vtkSimpleConditionVariable
......
......@@ -66,8 +66,6 @@
/* Threading system. */
#cmakedefine VTK_USE_PTHREADS
#cmakedefine VTK_USE_SPROC
#cmakedefine VTK_HP_PTHREADS
#cmakedefine VTK_USE_WIN32_THREADS
# define VTK_MAX_THREADS @VTK_MAX_THREADS@
......
......@@ -144,7 +144,7 @@ public:
//----------------------------------------------------------------------------
// Function to test whether caller is the main thread.
static int vtkGarbageCollectorIsMainThread()
static vtkTypeBool vtkGarbageCollectorIsMainThread()
{
return
vtkMultiThreader::ThreadsEqual(vtkGarbageCollectorMainThread,
......
......@@ -20,20 +20,11 @@
vtkStandardNewMacro(vtkMultiThreader);
// These are the includes necessary for multithreaded rendering on an SGI
// using the sproc() call
#ifdef VTK_USE_SPROC
#include <sys/resource.h>
#include <sys/prctl.h>
#include <wait.h>
#include <errno.h>
#endif
// Need to define "vtkExternCThreadFunctionType" to avoid warning on some
// platforms about passing function pointer to an argument expecting an
// extern "C" function. Placing the typedef of the function pointer type
// inside an extern "C" block solves this problem.
#if defined(VTK_USE_PTHREADS) || defined(VTK_HP_PTHREADS)
#if defined(VTK_USE_PTHREADS)
#include <pthread.h>
extern "C" { typedef void *(*vtkExternCThreadFunctionType)(void *); }
#else
......@@ -79,11 +70,6 @@ int vtkMultiThreader::GetGlobalDefaultNumberOfThreads()
if (vtkMultiThreaderGlobalDefaultNumberOfThreads == 0)
{
int num = 1; // default is 1
#ifdef VTK_USE_SPROC
// Default the number of threads to be the number of available
// processors if we are using sproc()
num = prctl( PR_MAXPPROCS );
#endif
#ifdef VTK_USE_PTHREADS
// Default the number of threads to be the number of available
......@@ -93,9 +79,6 @@ int vtkMultiThreader::GetGlobalDefaultNumberOfThreads()
#elif defined(_SC_NPROC_ONLN)
num = sysconf( _SC_NPROC_ONLN );
#endif
#if defined(__SVR4) && defined(sun) && defined(PTHREAD_MUTEX_NORMAL)
pthread_setconcurrency(num);
#endif
#endif
#ifdef __APPLE__
......@@ -119,13 +102,11 @@ int vtkMultiThreader::GetGlobalDefaultNumberOfThreads()
#endif
#ifndef VTK_USE_WIN32_THREADS
#ifndef VTK_USE_SPROC
#ifndef VTK_USE_PTHREADS
// If we are not multithreading, the number of threads should
// always be 1
num = 1;
#endif
#endif
#endif
// Lets limit the number of threads to VTK_MAX_THREADS
......@@ -231,11 +212,6 @@ void vtkMultiThreader::SingleMethodExecute()
HANDLE process_id[VTK_MAX_THREADS] = {};
#endif
#ifdef VTK_USE_SPROC
siginfo_t info_ptr;
int process_id[VTK_MAX_THREADS] = {};
#endif
#ifdef VTK_USE_PTHREADS
pthread_t process_id[VTK_MAX_THREADS] = {};
#endif
......@@ -253,12 +229,8 @@ void vtkMultiThreader::SingleMethodExecute()
this->NumberOfThreads = vtkMultiThreaderGlobalMaximumNumberOfThreads;
}
// We are using sproc (on SGIs), pthreads(on Suns), or a single thread
// (the default)
#ifdef VTK_USE_WIN32_THREADS
// Using CreateThread on a PC
// Using CreateThread on Windows
//
// We want to use CreateThread to start this->NumberOfThreads - 1
// additional threads which will be used to call this->SingleMethod().
......@@ -299,43 +271,6 @@ void vtkMultiThreader::SingleMethodExecute()
}
#endif
#ifdef VTK_USE_SPROC
// Using sproc() on an SGI
//
// We want to use sproc to start this->NumberOfThreads - 1 additional
// threads which will be used to call this->SingleMethod(). The
// parent thread will also call this routine. When it is done,
// it will wait for all the children to finish.
//
// First, start up the this->NumberOfThreads-1 processes. Keep track
// of their process ids for use later in the waitid call
for ( thread_loop = 1; thread_loop < this->NumberOfThreads; thread_loop++ )
{
this->ThreadInfoArray[thread_loop].UserData = this->SingleData;
this->ThreadInfoArray[thread_loop].NumberOfThreads = this->NumberOfThreads;
process_id[thread_loop] =
sproc( this->SingleMethod, PR_SADDR,
( (void *)(&this->ThreadInfoArray[thread_loop]) ) );
if ( process_id[thread_loop] == -1)
{
vtkErrorMacro("sproc call failed. Code: " << errno << endl);
}
}
// Now, the parent thread calls this->SingleMethod() itself
this->ThreadInfoArray[0].UserData = this->SingleData;
this->ThreadInfoArray[0].NumberOfThreads = this->NumberOfThreads;
this->SingleMethod((void *)(&this->ThreadInfoArray[0]) );
// The parent thread has finished this->SingleMethod() - so now it
// waits for each of the other processes to exit
for ( thread_loop = 1; thread_loop < this->NumberOfThreads; thread_loop++ )
{
waitid( P_PID, (id_t) process_id[thread_loop], &info_ptr, WEXITED );
}
#endif
#ifdef VTK_USE_PTHREADS
// Using POSIX threads
//
......@@ -349,13 +284,9 @@ void vtkMultiThreader::SingleMethodExecute()
pthread_attr_t attr;
#ifdef VTK_HP_PTHREADS
pthread_attr_create( &attr );
#else
pthread_attr_init(&attr);
#if !defined(__CYGWIN__)
pthread_attr_setscope(&attr, PTHREAD_SCOPE_PROCESS);
#endif
#endif
for ( thread_loop = 1; thread_loop < this->NumberOfThreads; thread_loop++ )
......@@ -363,13 +294,7 @@ void vtkMultiThreader::SingleMethodExecute()
this->ThreadInfoArray[thread_loop].UserData = this->SingleData;
this->ThreadInfoArray[thread_loop].NumberOfThreads = this->NumberOfThreads;
#ifdef VTK_HP_PTHREADS
pthread_create( &(process_id[thread_loop]),
attr, this->SingleMethod,
( (void *)(&this->ThreadInfoArray[thread_loop]) ) );
#else
int threadError;
threadError =
int threadError =
pthread_create( &(process_id[thread_loop]), &attr,
reinterpret_cast<vtkExternCThreadFunctionType>(
this->SingleMethod),
......@@ -379,7 +304,6 @@ void vtkMultiThreader::SingleMethodExecute()
vtkErrorMacro(<< "Unable to create a thread. pthread_create() returned "
<< threadError);
}
#endif
}
// Now, the parent thread calls this->SingleMethod() itself
......@@ -396,7 +320,6 @@ void vtkMultiThreader::SingleMethodExecute()
#endif
#ifndef VTK_USE_WIN32_THREADS
#ifndef VTK_USE_SPROC
#ifndef VTK_USE_PTHREADS
// There is no multi threading, so there is only one thread.
this->ThreadInfoArray[0].UserData = this->SingleData;
......@@ -404,7 +327,6 @@ void vtkMultiThreader::SingleMethodExecute()
this->SingleMethod( (void *)(&this->ThreadInfoArray[0]) );
#endif
#endif
#endif
}
void vtkMultiThreader::MultipleMethodExecute()
......@@ -416,11 +338,6 @@ void vtkMultiThreader::MultipleMethodExecute()
HANDLE process_id[VTK_MAX_THREADS] = {};
#endif
#ifdef VTK_USE_SPROC
siginfo_t info_ptr;
int process_id[VTK_MAX_THREADS] = {};
#endif
#ifdef VTK_USE_PTHREADS
pthread_t process_id[VTK_MAX_THREADS] = {};
#endif
......@@ -442,11 +359,8 @@ void vtkMultiThreader::MultipleMethodExecute()
}
}
// We are using sproc (on SGIs), pthreads(on Suns), CreateThread
// on a PC or a single thread (the default)
#ifdef VTK_USE_WIN32_THREADS
// Using CreateThread on a PC
// Using CreateThread on Windows
//
// We want to use CreateThread to start this->NumberOfThreads - 1
// additional threads which will be used to call the NumberOfThreads-1
......@@ -476,8 +390,7 @@ void vtkMultiThreader::MultipleMethodExecute()
(this->MultipleMethod[0])((void *)(&this->ThreadInfoArray[0]) );
// The parent thread has finished its method - so now it
// waits for each of the other processes (created with sproc) to
// exit
// waits for each of the other threads to exit
for ( thread_loop = 1; thread_loop < this->NumberOfThreads; thread_loop++ )
{
WaitForSingleObject(process_id[thread_loop], INFINITE);
......@@ -490,41 +403,6 @@ void vtkMultiThreader::MultipleMethodExecute()
}
#endif
#ifdef VTK_USE_SPROC
// Using sproc() on an SGI
//
// We want to use sproc to start this->NumberOfThreads - 1 additional
// threads which will be used to call the NumberOfThreads-1 methods
// defined in this->MultipleMethods[](). The parent thread
// will call this->MultipleMethods[NumberOfThreads-1](). When it is done,
// it will wait for all the children to finish.
//
// First, start up the this->NumberOfThreads-1 processes. Keep track
// of their process ids for use later in the waitid call
for ( thread_loop = 1; thread_loop < this->NumberOfThreads; thread_loop++ )
{
this->ThreadInfoArray[thread_loop].UserData =
this->MultipleData[thread_loop];
this->ThreadInfoArray[thread_loop].NumberOfThreads = this->NumberOfThreads;
process_id[thread_loop] =
sproc( this->MultipleMethod[thread_loop], PR_SADDR,
( (void *)(&this->ThreadInfoArray[thread_loop]) ) );
}
// Now, the parent thread calls the last method itself
this->ThreadInfoArray[0].UserData = this->MultipleData[0];
this->ThreadInfoArray[0].NumberOfThreads = this->NumberOfThreads;
(this->MultipleMethod[0])((void *)(&this->ThreadInfoArray[0]) );
// The parent thread has finished its method - so now it
// waits for each of the other processes (created with sproc) to
// exit
for ( thread_loop = 1; thread_loop < this->NumberOfThreads; thread_loop++ )
{
waitid( P_PID, (id_t) process_id[thread_loop], &info_ptr, WEXITED );
}
#endif
#ifdef VTK_USE_PTHREADS
// Using POSIX threads
//
......@@ -540,13 +418,9 @@ void vtkMultiThreader::MultipleMethodExecute()
pthread_attr_t attr;
#ifdef VTK_HP_PTHREADS
pthread_attr_create( &attr );
#else
pthread_attr_init(&attr);
#ifndef __CYGWIN__
pthread_attr_setscope(&attr, PTHREAD_SCOPE_PROCESS);
#endif
#endif
for ( thread_loop = 1; thread_loop < this->NumberOfThreads; thread_loop++ )
......@@ -554,17 +428,11 @@ void vtkMultiThreader::MultipleMethodExecute()
this->ThreadInfoArray[thread_loop].UserData =
this->MultipleData[thread_loop];
this->ThreadInfoArray[thread_loop].NumberOfThreads = this->NumberOfThreads;
#ifdef VTK_HP_PTHREADS
pthread_create( &(process_id[thread_loop]),
attr, this->MultipleMethod[thread_loop],
( (void *)(&this->ThreadInfoArray[thread_loop]) ) );
#else
pthread_create( &(process_id[thread_loop]),
&attr,
reinterpret_cast<vtkExternCThreadFunctionType>(
this->MultipleMethod[thread_loop]),
( (void *)(&this->ThreadInfoArray[thread_loop]) ) );
#endif
}
// Now, the parent thread calls the last method itself
......@@ -581,7 +449,6 @@ void vtkMultiThreader::MultipleMethodExecute()
#endif
#ifndef VTK_USE_WIN32_THREADS
#ifndef VTK_USE_SPROC
#ifndef VTK_USE_PTHREADS
// There is no multi threading, so there is only one thread.
this->ThreadInfoArray[0].UserData = this->MultipleData[0];
......@@ -589,17 +456,12 @@ void vtkMultiThreader::MultipleMethodExecute()
(this->MultipleMethod[0])( (void *)(&this->ThreadInfoArray[0]) );
#endif
#endif
#endif
}
int vtkMultiThreader::SpawnThread( vtkThreadFunctionType f, void *userdata )
{
int id;
#ifdef VTK_USE_WIN32_THREADS
DWORD threadId;
#endif
for ( id = 0; id < VTK_MAX_THREADS; id++ )
{
if ( this->SpawnedThreadActiveFlagLock[id] == nullptr )
......@@ -630,12 +492,10 @@ int vtkMultiThreader::SpawnThread( vtkThreadFunctionType f, void *userdata )
this->SpawnedThreadInfoArray[id].ActiveFlagLock =
this->SpawnedThreadActiveFlagLock[id];
// We are using sproc (on SGIs), pthreads(on Suns or HPs),
// CreateThread (on win32), or generating an error
#ifdef VTK_USE_WIN32_THREADS
// Using CreateThread on a PC
// Using CreateThread on Windows
//
DWORD threadId;
this->SpawnedThreadProcessID[id] =
CreateThread(nullptr, 0, f,
((void *)(&this->SpawnedThreadInfoArray[id])), 0, &threadId);
......@@ -645,43 +505,23 @@ int vtkMultiThreader::SpawnThread( vtkThreadFunctionType f, void *userdata )
}
#endif
#ifdef VTK_USE_SPROC
// Using sproc() on an SGI
//
this->SpawnedThreadProcessID[id] =
sproc( f, PR_SADDR, ( (void *)(&this->SpawnedThreadInfoArray[id]) ) );
#endif
#ifdef VTK_USE_PTHREADS
// Using POSIX threads
//
pthread_attr_t attr;
#ifdef VTK_HP_PTHREADS
pthread_attr_create( &attr );
#else
pthread_attr_init(&attr);
#ifndef __CYGWIN__
pthread_attr_setscope(&attr, PTHREAD_SCOPE_PROCESS);
#endif
#endif
#ifdef VTK_HP_PTHREADS
pthread_create( &(this->SpawnedThreadProcessID[id]),
attr, f,
( (void *)(&this->SpawnedThreadInfoArray[id]) ) );
#else
pthread_create( &(this->SpawnedThreadProcessID[id]),
&attr,
reinterpret_cast<vtkExternCThreadFunctionType>(f),
( (void *)(&this->SpawnedThreadInfoArray[id]) ) );
#endif
#endif
#ifndef VTK_USE_WIN32_THREADS
#ifndef VTK_USE_SPROC
#ifndef VTK_USE_PTHREADS
// There is no multi threading, so there is only one thread.
// This won't work - so give an error message.
......@@ -689,7 +529,6 @@ int vtkMultiThreader::SpawnThread( vtkThreadFunctionType f, void *userdata )
this->SpawnedThreadActiveFlagLock[id]->Delete();
id = -1;
#endif
#endif
#endif
return id;
......@@ -732,25 +571,16 @@ void vtkMultiThreader::TerminateThread( int threadID )
CloseHandle(this->SpawnedThreadProcessID[threadID]);
#endif
#ifdef VTK_USE_SPROC
siginfo_t info_ptr;
waitid( P_PID, (id_t) this->SpawnedThreadProcessID[threadID],
&info_ptr, WEXITED );
#endif
#ifdef VTK_USE_PTHREADS
pthread_join( this->SpawnedThreadProcessID[threadID], nullptr );
#endif
#ifndef VTK_USE_WIN32_THREADS
#ifndef VTK_USE_SPROC
#ifndef VTK_USE_PTHREADS
// There is no multi threading, so there is only one thread.
// This won't work - so give an error message.
vtkErrorMacro(<< "Cannot terminate thread in single threaded environment!");
#endif
#endif
#endif
this->SpawnedThreadActiveFlagLock[threadID]->Delete();
......@@ -765,8 +595,6 @@ vtkMultiThreaderIDType vtkMultiThreader::GetCurrentThreadID()
return pthread_self();
#elif defined(VTK_USE_WIN32_THREADS)
return GetCurrentThreadId();
#elif defined(VTK_USE_SPROC)
return getpid();
#else
// No threading implementation. Assume all callers are in the same
// thread.
......@@ -774,7 +602,7 @@ vtkMultiThreaderIDType vtkMultiThreader::GetCurrentThreadID()
#endif
}
int vtkMultiThreader::IsThreadActive( int threadID )
vtkTypeBool vtkMultiThreader::IsThreadActive( int threadID )
{
// check if the threadID argument is in range
if ( threadID >= VTK_MAX_THREADS )
......@@ -799,15 +627,13 @@ int vtkMultiThreader::IsThreadActive( int threadID )
}
//----------------------------------------------------------------------------
int vtkMultiThreader::ThreadsEqual(vtkMultiThreaderIDType t1,
vtkMultiThreaderIDType t2)
vtkTypeBool vtkMultiThreader::ThreadsEqual(vtkMultiThreaderIDType t1,
vtkMultiThreaderIDType t2)
{
#if defined(VTK_USE_PTHREADS)
return pthread_equal(t1, t2) != 0;
#elif defined(VTK_USE_WIN32_THREADS)
return t1 == t2;
#elif defined(VTK_USE_SPROC)
return t1 == t2;
#else
// No threading implementation. Assume all callers are in the same
// thread.
......@@ -826,12 +652,8 @@ void vtkMultiThreader::PrintSelf(ostream& os, vtkIndent indent)
os << "Thread system used: " <<
#ifdef VTK_USE_PTHREADS
"PTHREADS"
#elif defined VTK_USE_SPROC
"SPROC"
#elif defined VTK_USE_WIN32_THREADS
"WIN32 Threads"
#elif defined VTK_HP_PTHREADS
"HP PThreads"
#else
"NO THREADS SUPPORT"
#endif
......
......@@ -17,8 +17,8 @@
* @brief A class for performing multithreaded execution
*
* vtkMultithreader is a class that provides support for multithreaded
* execution using sproc() on an SGI, or pthread_create on any platform
* supporting POSIX threads. This class can be used to execute a single
* execution using pthreads on POSIX systems, or Win32 threads on
* Windows. This class can be used to execute a single
* method on multiple threads, or to specify a method per thread.
*/
......@@ -28,21 +28,14 @@
#include "vtkCommonCoreModule.h" // For export macro
#include "vtkObject.h"
#ifdef VTK_USE_SPROC
#include <sys/types.h> // Needed for unix implementation of sproc
#include <unistd.h> // Needed for unix implementation of sproc
#endif
#if defined(VTK_USE_PTHREADS) || defined(VTK_HP_PTHREADS)
#if defined(VTK_USE_PTHREADS)
#include <pthread.h> // Needed for PTHREAD implementation of mutex
#include <sys/types.h> // Needed for unix implementation of pthreads
#include <unistd.h> // Needed for unix implementation of pthreads
#endif
// If VTK_USE_SPROC is defined, then sproc() will be used to create
// multiple threads on an SGI. If VTK_USE_PTHREADS is defined, then
// pthread_create() will be used to create multiple threads (on
// a sun, for example)
// If VTK_USE_PTHREADS is defined, then pthread_create() will be
// used to create multiple threads
// Defined in vtkSystemIncludes.h:
// VTK_MAX_THREADS
......@@ -50,12 +43,6 @@
// If VTK_USE_PTHREADS is defined, then the multithreaded
// function is of type void *, and returns nullptr
// Otherwise the type is void which is correct for WIN32
// and SPROC
#ifdef VTK_USE_SPROC
typedef int vtkThreadProcessIDType;
typedef int vtkMultiThreaderIDType;
#endif
// Defined in vtkSystemIncludes.h:
// VTK_THREAD_RETURN_VALUE
......@@ -196,7 +183,7 @@ public:
/**
* Determine if a thread is still active
*/
int IsThreadActive( int threadID );
vtkTypeBool IsThreadActive( int threadID );
/**
* Get the thread identifier of the calling thread.
......@@ -206,8 +193,8 @@ public:
/**
* Check whether two thread identifiers refer to the same thread.
*/
static int ThreadsEqual(vtkMultiThreaderIDType t1,
vtkMultiThreaderIDType t2);
static vtkTypeBool ThreadsEqual(vtkMultiThreaderIDType t1,
vtkMultiThreaderIDType t2);
protected:
vtkMultiThreader();
......@@ -243,7 +230,3 @@ private: