Changes as suggested by Tim
This commit was SVN r2233.
Этот коммит содержится в:
родитель
6ca365c080
Коммит
cbd3442979
@ -11,12 +11,12 @@
|
|||||||
|
|
||||||
#if OMPI_HAVE_POSIX_THREADS
|
#if OMPI_HAVE_POSIX_THREADS
|
||||||
|
|
||||||
static void ompi_condition_construct(ompi_condition_t * c)
|
static void ompi_condition_construct(ompi_condition_t *c)
|
||||||
{
|
{
|
||||||
pthread_cond_init(&c->c_cond, NULL);
|
pthread_cond_init(&c->c_cond, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ompi_condition_destruct(ompi_condition_t * c)
|
static void ompi_condition_destruct(ompi_condition_t *c)
|
||||||
{
|
{
|
||||||
pthread_cond_destroy(&c->c_cond);
|
pthread_cond_destroy(&c->c_cond);
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include "threads/mutex.h"
|
#include "threads/mutex.h"
|
||||||
|
|
||||||
|
|
||||||
struct ompi_condition_t {
|
struct ompi_condition_t {
|
||||||
ompi_object_t super;
|
ompi_object_t super;
|
||||||
pthread_cond_t c_cond;
|
pthread_cond_t c_cond;
|
||||||
@ -17,22 +16,24 @@ typedef struct ompi_condition_t ompi_condition_t;
|
|||||||
OBJ_CLASS_DECLARATION(ompi_condition_t);
|
OBJ_CLASS_DECLARATION(ompi_condition_t);
|
||||||
|
|
||||||
|
|
||||||
static inline int ompi_condition_wait(ompi_condition_t* c, ompi_mutex_t* m)
|
static inline int ompi_condition_wait(ompi_condition_t *c, ompi_mutex_t *m)
|
||||||
{
|
{
|
||||||
return pthread_cond_wait(&c->c_cond, &m->m_lock.thread);
|
return pthread_cond_wait(&c->c_cond, &m->m_lock_pthread);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int ompi_condition_timedwait(ompi_condition_t* c, ompi_mutex_t* m, const struct timespec *abstime)
|
static inline int ompi_condition_timedwait(ompi_condition_t *c,
|
||||||
|
ompi_mutex_t *m,
|
||||||
|
const struct timespec *abstime)
|
||||||
{
|
{
|
||||||
return pthread_cond_timedwait(&c->c_cond, &m->m_lock.thread, abstime);
|
return pthread_cond_timedwait(&c->c_cond, &m->m_lock_pthread, abstime);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int ompi_condition_signal(ompi_condition_t* c)
|
static inline int ompi_condition_signal(ompi_condition_t *c)
|
||||||
{
|
{
|
||||||
return pthread_cond_signal(&c->c_cond);
|
return pthread_cond_signal(&c->c_cond);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int ompi_condition_broadcast(ompi_condition_t* c)
|
static inline int ompi_condition_broadcast(ompi_condition_t *c)
|
||||||
{
|
{
|
||||||
return pthread_cond_broadcast(&c->c_cond);
|
return pthread_cond_broadcast(&c->c_cond);
|
||||||
}
|
}
|
||||||
|
@ -11,15 +11,14 @@
|
|||||||
|
|
||||||
#if (OMPI_HAVE_THREADS == 0)
|
#if (OMPI_HAVE_THREADS == 0)
|
||||||
|
|
||||||
|
static void ompi_condition_construct(ompi_condition_t *c)
|
||||||
static void ompi_condition_construct(ompi_condition_t * c)
|
|
||||||
{
|
{
|
||||||
c->c_waiting = 0;
|
c->c_waiting = 0;
|
||||||
c->c_signaled = 0;
|
c->c_signaled = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void ompi_condition_destruct(ompi_condition_t * c)
|
static void ompi_condition_destruct(ompi_condition_t *c)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,10 +6,8 @@
|
|||||||
|
|
||||||
#include "threads/condition.h"
|
#include "threads/condition.h"
|
||||||
#include "threads/mutex.h"
|
#include "threads/mutex.h"
|
||||||
#include "threads/mutex_spinlock.h"
|
|
||||||
#include "runtime/ompi_progress.h"
|
#include "runtime/ompi_progress.h"
|
||||||
|
|
||||||
|
|
||||||
struct ompi_condition_t {
|
struct ompi_condition_t {
|
||||||
volatile int c_waiting;
|
volatile int c_waiting;
|
||||||
volatile int c_signaled;
|
volatile int c_signaled;
|
||||||
@ -19,17 +17,17 @@ typedef struct ompi_condition_t ompi_condition_t;
|
|||||||
OBJ_CLASS_DECLARATION(ompi_condition_t);
|
OBJ_CLASS_DECLARATION(ompi_condition_t);
|
||||||
|
|
||||||
|
|
||||||
static inline int ompi_condition_wait(ompi_condition_t* c, ompi_mutex_t* m)
|
static inline int ompi_condition_wait(ompi_condition_t *c, ompi_mutex_t *m)
|
||||||
{
|
{
|
||||||
c->c_waiting++;
|
c->c_waiting++;
|
||||||
if(ompi_using_threads()) {
|
if (ompi_using_threads()) {
|
||||||
while(c->c_signaled == 0) {
|
while (c->c_signaled == 0) {
|
||||||
ompi_mutex_unlock(m);
|
ompi_mutex_unlock(m);
|
||||||
ompi_progress();
|
ompi_progress();
|
||||||
ompi_mutex_lock(m);
|
ompi_mutex_lock(m);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
while(c->c_signaled == 0) {
|
while (c->c_signaled == 0) {
|
||||||
ompi_mutex_unlock(m);
|
ompi_mutex_unlock(m);
|
||||||
ompi_progress();
|
ompi_progress();
|
||||||
ompi_mutex_lock(m);
|
ompi_mutex_lock(m);
|
||||||
@ -40,20 +38,22 @@ static inline int ompi_condition_wait(ompi_condition_t* c, ompi_mutex_t* m)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int ompi_condition_timedwait(ompi_condition_t* c, ompi_mutex_t* m, const struct timespec *abstime)
|
static inline int ompi_condition_timedwait(ompi_condition_t *c,
|
||||||
|
ompi_mutex_t *m,
|
||||||
|
const struct timespec *abstime)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int ompi_condition_signal(ompi_condition_t* c)
|
static inline int ompi_condition_signal(ompi_condition_t *c)
|
||||||
{
|
{
|
||||||
if(c->c_waiting) {
|
if (c->c_waiting) {
|
||||||
c->c_signaled++;
|
c->c_signaled++;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int ompi_condition_broadcast(ompi_condition_t* c)
|
static inline int ompi_condition_broadcast(ompi_condition_t *c)
|
||||||
{
|
{
|
||||||
c->c_signaled += c->c_waiting;
|
c->c_signaled += c->c_waiting;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -32,17 +32,17 @@ static void ompi_mutex_destruct(ompi_mutex_t *m)
|
|||||||
static void ompi_mutex_construct(ompi_mutex_t *m)
|
static void ompi_mutex_construct(ompi_mutex_t *m)
|
||||||
{
|
{
|
||||||
#if OMPI_HAVE_POSIX_THREADS
|
#if OMPI_HAVE_POSIX_THREADS
|
||||||
pthread_mutex_init(&m->m_lock.thread, 0);
|
pthread_mutex_init(&m->m_lock_pthread, 0);
|
||||||
#endif
|
#endif
|
||||||
#if OMPI_SYS_ARCH_ATOMIC_H
|
#if OMPI_SYS_ARCH_ATOMIC_H
|
||||||
ompi_atomic_unlock(&m->m_lock.atomic);
|
ompi_atomic_unlock(&m->m_lock_atomic);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ompi_mutex_destruct(ompi_mutex_t *m)
|
static void ompi_mutex_destruct(ompi_mutex_t *m)
|
||||||
{
|
{
|
||||||
#if OMPI_HAVE_POSIX_THREADS
|
#if OMPI_HAVE_POSIX_THREADS
|
||||||
pthread_mutex_destroy(&m->m_lock);
|
pthread_mutex_destroy(&m->m_lock_pthread);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,14 +26,8 @@
|
|||||||
|
|
||||||
struct ompi_mutex_t {
|
struct ompi_mutex_t {
|
||||||
ompi_object_t super;
|
ompi_object_t super;
|
||||||
union {
|
pthread_mutex_t m_lock_pthread;
|
||||||
#if OMPI_HAVE_POSIX_THREADS
|
ompi_lock_t m_lock_atomic;
|
||||||
pthread_mutex_t thread;
|
|
||||||
#endif
|
|
||||||
#if OMPI_SYS_ARCH_ATOMIC_H
|
|
||||||
ompi_lock_t atomic;
|
|
||||||
#endif
|
|
||||||
} m_lock;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
OBJ_CLASS_DECLARATION(ompi_mutex_t);
|
OBJ_CLASS_DECLARATION(ompi_mutex_t);
|
||||||
@ -46,35 +40,35 @@ OBJ_CLASS_DECLARATION(ompi_mutex_t);
|
|||||||
* ompi_mutex_atomic_* implemented using atomic operations
|
* ompi_mutex_atomic_* implemented using atomic operations
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static inline int ompi_mutex_trylock(ompi_mutex_t * m)
|
static inline int ompi_mutex_trylock(ompi_mutex_t *m)
|
||||||
{
|
{
|
||||||
return pthread_mutex_trylock(&m->m_lock.thread);
|
return pthread_mutex_trylock(&m->m_lock_pthread);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void ompi_mutex_lock(ompi_mutex_t * m)
|
static inline void ompi_mutex_lock(ompi_mutex_t *m)
|
||||||
{
|
{
|
||||||
pthread_mutex_lock(&m->m_lock.thread);
|
pthread_mutex_lock(&m->m_lock_pthread);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void ompi_mutex_unlock(ompi_mutex_t * m)
|
static inline void ompi_mutex_unlock(ompi_mutex_t *m)
|
||||||
{
|
{
|
||||||
pthread_mutex_unlock(&m->m_lock.thread);
|
pthread_mutex_unlock(&m->m_lock_pthread);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static inline void ompi_mutex_atomic_lock(ompi_mutex_t * m)
|
static inline void ompi_mutex_atomic_lock(ompi_mutex_t *m)
|
||||||
{
|
{
|
||||||
ompi_atomic_lock(&m->m_lock.atomic);
|
ompi_atomic_lock(&m->m_lock_atomic);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int ompi_mutex_atomic_trylock(ompi_mutex_t * m)
|
static inline int ompi_mutex_atomic_trylock(ompi_mutex_t *m)
|
||||||
{
|
{
|
||||||
return ompi_atomic_trylock(&m->m_lock.atomic);
|
return ompi_atomic_trylock(&m->m_lock_atomic);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void ompi_mutex_atomic_unlock(ompi_mutex_t * m)
|
static inline void ompi_mutex_atomic_unlock(ompi_mutex_t *m)
|
||||||
{
|
{
|
||||||
ompi_atomic_unlock(&m->m_lock.atomic);
|
ompi_atomic_unlock(&m->m_lock_atomic);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -84,33 +78,33 @@ static inline void ompi_mutex_atomic_unlock(ompi_mutex_t * m)
|
|||||||
* ompi_mutex_* and ompi_mutex_atomic_* implemented using pthreads
|
* ompi_mutex_* and ompi_mutex_atomic_* implemented using pthreads
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static inline int ompi_mutex_trylock(ompi_mutex_t * m)
|
static inline int ompi_mutex_trylock(ompi_mutex_t *m)
|
||||||
{
|
{
|
||||||
return pthread_mutex_trylock(&m->m_lock.thread);
|
return pthread_mutex_trylock(&m->m_lock_pthread);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void ompi_mutex_lock(ompi_mutex_t * m)
|
static inline void ompi_mutex_lock(ompi_mutex_t *m)
|
||||||
{
|
{
|
||||||
pthread_mutex_lock(&m->m_lock.thread);
|
pthread_mutex_lock(&m->m_lock_pthread);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void ompi_mutex_unlock(ompi_mutex_t * m)
|
static inline void ompi_mutex_unlock(ompi_mutex_t *m)
|
||||||
{
|
{
|
||||||
pthread_mutex_unlock(&m->m_lock.thread);
|
pthread_mutex_unlock(&m->m_lock_pthread);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static inline int ompi_mutex_atomic_trylock(ompi_mutex_t * m)
|
static inline int ompi_mutex_atomic_trylock(ompi_mutex_t *m)
|
||||||
{
|
{
|
||||||
return ompi_mutex_trylock(m);
|
return ompi_mutex_trylock(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void ompi_mutex_atomic_lock(ompi_mutex_t * m)
|
static inline void ompi_mutex_atomic_lock(ompi_mutex_t *m)
|
||||||
{
|
{
|
||||||
ompi_mutex_lock(m);
|
ompi_mutex_lock(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void ompi_mutex_atomic_unlock(ompi_mutex_t * m)
|
static inline void ompi_mutex_atomic_unlock(ompi_mutex_t *m)
|
||||||
{
|
{
|
||||||
ompi_mutex_unlock(m);
|
ompi_mutex_unlock(m);
|
||||||
}
|
}
|
||||||
@ -123,33 +117,33 @@ static inline void ompi_mutex_atomic_unlock(ompi_mutex_t * m)
|
|||||||
* operations
|
* operations
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static inline int ompi_mutex_trylock(ompi_mutex_t * m)
|
static inline int ompi_mutex_trylock(ompi_mutex_t *m)
|
||||||
{
|
{
|
||||||
return ompi_atomic_trylock(&m->m_lock.atomic);
|
return ompi_atomic_trylock(&m->m_lock_atomic);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void ompi_mutex_lock(ompi_mutex_t * m)
|
static inline void ompi_mutex_lock(ompi_mutex_t *m)
|
||||||
{
|
{
|
||||||
ompi_atomic_lock(&m->m_lock.atomic);
|
ompi_atomic_lock(&m->m_lock_atomic);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void ompi_mutex_unlock(ompi_mutex_t * m)
|
static inline void ompi_mutex_unlock(ompi_mutex_t *m)
|
||||||
{
|
{
|
||||||
ompi_atomic_unlock(&m->m_lock.atomic);
|
ompi_atomic_unlock(&m->m_lock_atomic);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static inline int ompi_mutex_atomic_trylock(ompi_mutex_t * m)
|
static inline int ompi_mutex_atomic_trylock(ompi_mutex_t *m)
|
||||||
{
|
{
|
||||||
return ompi_mutex_trylock(m);
|
return ompi_mutex_trylock(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void ompi_mutex_atomic_lock(ompi_mutex_t * m)
|
static inline void ompi_mutex_atomic_lock(ompi_mutex_t *m)
|
||||||
{
|
{
|
||||||
ompi_mutex_lock(m);
|
ompi_mutex_lock(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void ompi_mutex_atomic_unlock(ompi_mutex_t * m)
|
static inline void ompi_mutex_atomic_unlock(ompi_mutex_t *m)
|
||||||
{
|
{
|
||||||
ompi_mutex_unlock(m);
|
ompi_mutex_unlock(m);
|
||||||
}
|
}
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user