[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
This commit is contained in:
parent
714445ae04
commit
e7a7f4bea8
3 changed files with 15 additions and 6 deletions
|
@ -1,3 +1,12 @@
|
|||
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
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
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[];
|
||||
|
@ -96,9 +96,9 @@ gomp_get_thread_pool (struct gomp_thread *thr, unsigned nthreads)
|
|||
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;
|
||||
}
|
||||
|
@ -115,9 +115,9 @@ gomp_release_thread_pool (struct gomp_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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -66,7 +66,7 @@ allocate_thread_pool_reservoir (unsigned long count, unsigned long priority,
|
|||
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;
|
||||
|
|
Loading…
Add table
Reference in a new issue