1
1

Change to the new atomic operations.

This commit was SVN r3388.
Этот коммит содержится в:
George Bosilca 2004-10-28 17:41:10 +00:00
родитель fdaaae5998
Коммит 8c0d5522b1
4 изменённых файлов: 6 добавлений и 21 удалений

Просмотреть файл

@ -407,34 +407,22 @@ static inline int ompi_obj_update(ompi_object_t *object, int inc)
{
#ifdef WIN32
int newval;
LONG volatile *addr;
addr = (LONG volatile *) &(object->obj_reference_count);
newval = (int) InterlockedExchangeAdd(addr, (LONG) inc) + inc;
(void)InterlockedExchangeAdd(addr, (LONG) inc) + inc;
#elif OMPI_HAVE_ATOMIC
int newval;
int oldval;
volatile int *addr;
addr = (volatile int *) &(object->obj_reference_count);
do {
oldval = *addr;
newval = oldval + inc;
} while (ompi_atomic_cmpset_int(addr, oldval, newval) == 0);
ompi_atomic_add(&(object->obj_reference_count), 1 );
#else
int newval;
object->obj_reference_count += inc;
newval = object->obj_reference_count;
#endif
return newval;
return object->obj_reference_count;
}
/**********************************************************************/

Просмотреть файл

@ -128,16 +128,13 @@ static inline bool mca_pml_base_send_request_matched(
*
* @param request (IN) Send request.
* @param offset (IN) Increment.
* return TRUE if an ack/match has been received from peer.
*/
static inline void mca_pml_base_send_request_offset(
mca_pml_base_send_request_t* request,
size_t offset)
{
OMPI_THREAD_LOCK(&ompi_request_lock);
request->req_offset += offset;
OMPI_THREAD_UNLOCK(&ompi_request_lock);
ompi_atomic_add( &(request->req_offset), offset );
}
#if defined(c_plusplus) || defined(__cplusplus)

Просмотреть файл

@ -119,7 +119,7 @@ static inline void mca_ptl_tcp_recv_frag_progress(mca_ptl_tcp_recv_frag_t* frag)
if((frag)->frag_msg_cnt >= frag->frag_recv.frag_base.frag_header.hdr_frag.hdr_frag_length) {
/* make sure this only happens once for threaded case */
if(ompi_atomic_fetch_and_set_int(&frag->frag_progressed, 1) == 0) {
if(ompi_atomic_cmpset(&frag->frag_progressed, 0, 1) == 1) {
mca_pml_base_recv_request_t* request = frag->frag_recv.frag_request;
if(frag->frag_recv.frag_is_buffered) {
mca_ptl_base_match_header_t* header = &(frag)->frag_recv.frag_base.frag_header.hdr_match;

Просмотреть файл

@ -94,7 +94,7 @@ static inline void mca_ptl_tcp_send_frag_progress(mca_ptl_tcp_send_frag_t* frag)
mca_pml_base_send_request_matched(request))) {
/* make sure this only happens once in threaded case */
if(ompi_atomic_fetch_and_set_int(&frag->frag_progressed,1) == 0) {
if(ompi_atomic_cmpset(&frag->frag_progressed, 0, 1) == 1) {
/* update request status */
frag->frag_send.frag_base.frag_owner->ptl_send_progress(