extern MagickPrivate void
SemaphoreComponentTerminus(void);
-#if defined(MAGICKCORE_OPENMP_SUPPORT)
-static omp_lock_t
- semaphore_mutex;
-#elif defined(MAGICKCORE_THREAD_SUPPORT)
+#if 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_OPENMP_SUPPORT)
- omp_destroy_lock(&semaphore_mutex);
+#if 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_OPENMP_SUPPORT)
- omp_init_lock(&semaphore_mutex);
+#if 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_OPENMP_SUPPORT)
- omp_set_lock(&semaphore_mutex);
-#elif defined(MAGICKCORE_THREAD_SUPPORT)
+#if defined(MAGICKCORE_THREAD_SUPPORT)
{
int
status;
#elif defined(MAGICKCORE_HAVE_WINTHREADS)
while (InterlockedCompareExchange(&semaphore_mutex,1L,0L) != 0)
Sleep(10);
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+ omp_set_lock(&semaphore_mutex);
#endif
}
static inline void UnlockMagickMutex(void)
{
-#if defined(MAGICKCORE_OPENMP_SUPPORT)
- omp_unset_lock(&semaphore_mutex);
-#elif defined(MAGICKCORE_THREAD_SUPPORT)
+#if 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_OPENMP_SUPPORT)
- omp_init_lock((omp_lock_t *) &semaphore_info->mutex);
-#elif defined(MAGICKCORE_THREAD_SUPPORT)
+#if 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_OPENMP_SUPPORT)
- omp_destroy_lock((omp_lock_t *) &(*semaphore_info)->mutex);
-#elif defined(MAGICKCORE_THREAD_SUPPORT)
+#if 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_OPENMP_SUPPORT)
- omp_set_lock((omp_lock_t *) &semaphore_info->mutex);
-#elif defined(MAGICKCORE_THREAD_SUPPORT)
+#if 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) &&
}
semaphore_info->reference_count--;
#endif
-#if defined(MAGICKCORE_OPENMP_SUPPORT)
- omp_unset_lock((omp_lock_t *) &semaphore_info->mutex);
-#elif defined(MAGICKCORE_THREAD_SUPPORT)
+#if defined(MAGICKCORE_THREAD_SUPPORT)
{
int
status;
}
#elif defined(MAGICKCORE_HAVE_WINTHREADS)
LeaveCriticalSection(&semaphore_info->mutex);
+#elif defined(MAGICKCORE_OPENMP_SUPPORT)
+ omp_unset_lock((omp_lock_t *) &semaphore_info->mutex);
#endif
}