Commit e7a7f4be by Sebastian Huber Committed by Sebastian Huber

[RTEMS] Use spin lock for pool management

libgomp/

	* 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.

From-SVN: r243181
parent 714445ae
2016-12-02 Sebastian Huber <sebastian.huber@embedded-brains.de> 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 * config/rtems/pool.h (gomp_get_thread_pool): Return proper
thread pool in case nthreads == 1. thread pool in case nthreads == 1.
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
GOMP_RTEMS_THREAD_POOLS environment variable. */ GOMP_RTEMS_THREAD_POOLS environment variable. */
struct gomp_thread_pool_reservoir { struct gomp_thread_pool_reservoir {
gomp_sem_t available; gomp_sem_t available;
gomp_mutex_t lock; pthread_spinlock_t lock;
size_t index; size_t index;
int priority; int priority;
struct gomp_thread_pool *pools[]; struct gomp_thread_pool *pools[];
...@@ -96,9 +96,9 @@ gomp_get_thread_pool (struct gomp_thread *thr, unsigned nthreads) ...@@ -96,9 +96,9 @@ gomp_get_thread_pool (struct gomp_thread *thr, unsigned nthreads)
if (res != NULL) if (res != NULL)
{ {
gomp_sem_wait (&res->available); gomp_sem_wait (&res->available);
gomp_mutex_lock (&res->lock); pthread_spin_lock (&res->lock);
pool = res->pools[--res->index]; pool = res->pools[--res->index];
gomp_mutex_unlock (&res->lock); pthread_spin_unlock (&res->lock);
pool->threads_busy = nthreads; pool->threads_busy = nthreads;
thr->thread_pool = pool; thr->thread_pool = pool;
} }
...@@ -115,9 +115,9 @@ gomp_release_thread_pool (struct gomp_thread_pool *pool) ...@@ -115,9 +115,9 @@ gomp_release_thread_pool (struct gomp_thread_pool *pool)
gomp_tls_rtems_data.thread_pool_reservoir; gomp_tls_rtems_data.thread_pool_reservoir;
if (res != NULL) if (res != NULL)
{ {
gomp_mutex_lock (&res->lock); pthread_spin_lock (&res->lock);
res->pools[res->index++] = pool; res->pools[res->index++] = pool;
gomp_mutex_unlock (&res->lock); pthread_spin_unlock (&res->lock);
gomp_sem_post (&res->available); gomp_sem_post (&res->available);
} }
} }
......
...@@ -66,7 +66,7 @@ allocate_thread_pool_reservoir (unsigned long count, unsigned long priority, ...@@ -66,7 +66,7 @@ allocate_thread_pool_reservoir (unsigned long count, unsigned long priority,
res->index = count; res->index = count;
res->priority = priority; res->priority = priority;
gomp_sem_init (&res->available, count); 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) for (i = 0; i < count; ++i)
res->pools[i] = &pools[i]; res->pools[i] = &pools[i];
gomp_thread_pool_reservoirs[scheduler] = res; gomp_thread_pool_reservoirs[scheduler] = res;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment