18#ifndef _WIZARDSTOOLKIT_THREAD_PRIVATE_H
19#define _WIZARDSTOOLKIT_THREAD_PRIVATE_H
23#if defined(__cplusplus) || defined(c_plusplus)
27#if defined(__clang__) || (__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ > 10))
28#define WizardCachePrefetch(address,mode,locality) \
29 __builtin_prefetch(address,mode,locality)
31#define WizardCachePrefetch(address,mode,locality)
34#define omp_throttle(factor) num_threads(omp_get_max_threads() >> \
35 (factor) == 0 ? 1 : omp_get_max_threads() >> (factor))
37#if defined(WIZARDSTOOLKIT_THREAD_SUPPORT)
39#elif defined(WIZARDSTOOLKIT_WINDOWS_SUPPORT)
47#if defined(WIZARDSTOOLKIT_THREAD_SUPPORT)
48 return(pthread_self());
49#elif defined(WIZARDSTOOLKIT_WINDOWS_SUPPORT)
50 return(GetCurrentThreadId());
58#if defined(WIZARDSTOOLKIT_THREAD_SUPPORT)
69 wizard_thread.signature=0UL;
70 wizard_thread.id=pthread_self();
71 return(wizard_thread.signature);
73#elif defined(WIZARDSTOOLKIT_WINDOWS_SUPPORT)
74 return((
size_t) GetCurrentThreadId());
76 return((
size_t) getpid());
82#if defined(WIZARDSTOOLKIT_THREAD_SUPPORT)
83 if (pthread_equal(
id,pthread_self()) != 0)
85#elif defined(WIZARDSTOOLKIT_WINDOWS_SUPPORT)
86 if (
id == GetCurrentThreadId())
103#if defined(WIZARDSTOOLKIT_OPENMP_SUPPORT)
104 if (omp_get_max_threads() > (ssize_t) maximum_threads)
105 maximum_threads=omp_get_max_threads();
107 return(maximum_threads);
112#if defined(WIZARDSTOOLKIT_OPENMP_SUPPORT)
113 return(omp_get_thread_num());
121#if defined(WIZARDSTOOLKIT_OPENMP_SUPPORT)
122 omp_set_num_threads(threads);
130#if defined(WIZARDSTOOLKIT_OPENMP_SUPPORT) && (_OPENMP >= 200203)
131 omp_set_nested(value);
137#if defined(__cplusplus) || defined(c_plusplus)
static void SetOpenMPNested(const int value)
static ssize_t GetOpenMPThreadId(void)
static WizardThreadType GetWizardThreadId(void)
static void SetOpenMPMaximumThreads(const size_t threads)
static size_t GetWizardThreadSignature(void)
static size_t GetOpenMPMaximumThreads(void)
static WizardBooleanType IsWizardThreadEqual(const WizardThreadType id)