+2016-12-02 Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+ * libgomp/config/rtems/pool.h (gomp_thread_pool_reservoir): Use
+ pthread_spinlock_t instead of gomp_mutex_t lock.
+ (gomp_get_thread_pool): Likewise.
+ (gomp_release_thread_pool): Likewise.
+ * libgomp/config/rtems/proc.c (allocate_thread_pool_reservoir):
+ Likewise.
+
2016-12-02 Sebastian Huber <sebastian.huber@embedded-brains.de>
* config/rtems/pool.h (gomp_get_thread_pool): Return proper
GOMP_RTEMS_THREAD_POOLS environment variable. */
struct gomp_thread_pool_reservoir {
gomp_sem_t available;
- gomp_mutex_t lock;
+ pthread_spinlock_t lock;
size_t index;
int priority;
struct gomp_thread_pool *pools[];
if (res != NULL)
{
gomp_sem_wait (&res->available);
- gomp_mutex_lock (&res->lock);
+ pthread_spin_lock (&res->lock);
pool = res->pools[--res->index];
- gomp_mutex_unlock (&res->lock);
+ pthread_spin_unlock (&res->lock);
pool->threads_busy = nthreads;
thr->thread_pool = pool;
}
gomp_tls_rtems_data.thread_pool_reservoir;
if (res != NULL)
{
- gomp_mutex_lock (&res->lock);
+ pthread_spin_lock (&res->lock);
res->pools[res->index++] = pool;
- gomp_mutex_unlock (&res->lock);
+ pthread_spin_unlock (&res->lock);
gomp_sem_post (&res->available);
}
}
res->index = count;
res->priority = priority;
gomp_sem_init (&res->available, count);
- gomp_mutex_init (&res->lock);
+ pthread_spin_init (&res->lock, PTHREAD_PROCESS_PRIVATE);
for (i = 0; i < count; ++i)
res->pools[i] = &pools[i];
gomp_thread_pool_reservoirs[scheduler] = res;