extern MagickPrivate void
SemaphoreComponentTerminus(void);
-#if defined(MAGICKCORE_THREAD_SUPPORT)
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+static omp_lock_t
+ semaphore_mutex;
+#elif defined(MAGICKCORE_THREAD_SUPPORT)
static pthread_mutex_t
semaphore_mutex = PTHREAD_MUTEX_INITIALIZER;
#elif defined(MAGICKCORE_HAVE_WINTHREADS)
static LONG
semaphore_mutex = 0;
-#elif defined(MAGICKCORE_OPENMP_SUPPORT)
-static omp_lock_t
- semaphore_mutex;
#else
static ssize_t
semaphore_mutex = 0;
{
if (active_mutex != MagickFalse)
{
-#if defined(MAGICKCORE_THREAD_SUPPORT)
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+ omp_destroy_lock(&semaphore_mutex);
+#elif defined(MAGICKCORE_THREAD_SUPPORT)
;
#elif defined(MAGICKCORE_HAVE_WINTHREADS)
DeleteCriticalSection(&semaphore_mutex);
-#elif defined(MAGICKCORE_OPENMP_SUPPORT)
- omp_destroy_lock(&semaphore_mutex);
#endif
}
active_mutex=MagickFalse;
{
if (active_mutex == MagickFalse)
{
-#if defined(MAGICKCORE_THREAD_SUPPORT)
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+ omp_init_lock(&semaphore_mutex);
+#elif defined(MAGICKCORE_THREAD_SUPPORT)
;
#elif defined(MAGICKCORE_HAVE_WINTHREADS)
InitializeCriticalSection(&semaphore_mutex);
-#elif defined(MAGICKCORE_OPENMP_SUPPORT)
- omp_init_lock(&semaphore_mutex);
#endif
}
active_mutex=MagickTrue;
static inline void LockMagickMutex(void)
{
-#if defined(MAGICKCORE_THREAD_SUPPORT)
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+ omp_set_lock(&semaphore_mutex);
+#elif defined(MAGICKCORE_THREAD_SUPPORT)
{
int
status;
#elif defined(MAGICKCORE_HAVE_WINTHREADS)
while (InterlockedCompareExchange(&semaphore_mutex,1L,0L) != 0)
Sleep(10);
-#elif defined(MAGICKCORE_OPENMP_SUPPORT)
- omp_set_lock(&semaphore_mutex);
#endif
}
static inline void UnlockMagickMutex(void)
{
-#if defined(MAGICKCORE_THREAD_SUPPORT)
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+ omp_unset_lock(&semaphore_mutex);
+#elif defined(MAGICKCORE_THREAD_SUPPORT)
{
int
status;
}
#elif defined(MAGICKCORE_HAVE_WINTHREADS)
InterlockedExchange(&semaphore_mutex,0L);
-#elif defined(MAGICKCORE_OPENMP_SUPPORT)
- omp_unset_lock(&semaphore_mutex);
#endif
}
/*
Initialize the semaphore.
*/
-#if defined(MAGICKCORE_THREAD_SUPPORT)
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+ omp_init_lock((omp_lock_t *) &semaphore_info->mutex);
+#elif defined(MAGICKCORE_THREAD_SUPPORT)
{
int
status;
_exit(1);
}
}
-#elif defined(MAGICKCORE_OPENMP_SUPPORT)
- omp_init_lock((omp_lock_t *) &semaphore_info->mutex);
#endif
semaphore_info->id=GetMagickThreadId();
semaphore_info->reference_count=0;
assert((*semaphore_info)->signature == MagickSignature);
InitializeMagickMutex();
LockMagickMutex();
-#if defined(MAGICKCORE_THREAD_SUPPORT)
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+ omp_destroy_lock((omp_lock_t *) &(*semaphore_info)->mutex);
+#elif defined(MAGICKCORE_THREAD_SUPPORT)
{
int
status;
}
#elif defined(MAGICKCORE_HAVE_WINTHREADS)
DeleteCriticalSection(&(*semaphore_info)->mutex);
-#elif defined(MAGICKCORE_OPENMP_SUPPORT)
- omp_destroy_lock((omp_lock_t *) &(*semaphore_info)->mutex);
#endif
(*semaphore_info)->signature=(~MagickSignature);
*semaphore_info=(SemaphoreInfo *) RelinquishSemaphoreMemory(*semaphore_info);
{
assert(semaphore_info != (SemaphoreInfo *) NULL);
assert(semaphore_info->signature == MagickSignature);
-#if defined(MAGICKCORE_THREAD_SUPPORT)
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+ omp_set_lock((omp_lock_t *) &semaphore_info->mutex);
+#elif defined(MAGICKCORE_THREAD_SUPPORT)
{
int
status;
}
#elif defined(MAGICKCORE_HAVE_WINTHREADS)
EnterCriticalSection(&semaphore_info->mutex);
-#elif defined(MAGICKCORE_OPENMP_SUPPORT)
- omp_set_lock((omp_lock_t *) &semaphore_info->mutex);
#endif
#if defined(MAGICKCORE_DEBUG)
if ((semaphore_info->reference_count > 0) &&
{
assert(semaphore_info != (SemaphoreInfo *) NULL);
assert(semaphore_info->signature == MagickSignature);
-#if defined(MAGICKCORE_DEBUG)
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+ omp_unset_lock((omp_lock_t *) &semaphore_info->mutex);
+#elif defined(MAGICKCORE_DEBUG)
assert(IsMagickThreadEqual(semaphore_info->id) != MagickFalse);
if (semaphore_info->reference_count == 0)
{
}
#elif defined(MAGICKCORE_HAVE_WINTHREADS)
LeaveCriticalSection(&semaphore_info->mutex);
-#elif defined(MAGICKCORE_OPENMP_SUPPORT)
- omp_unset_lock((omp_lock_t *) &semaphore_info->mutex);
#endif
}