000f9eed4d
This commit updates the entire codebase to use specific opal types for all atomic variables. This is a change from the prior atomic support which required the use of the volatile keyword. This is the first step towards implementing support for C11 atomics as that interface requires the use of types declared with the _Atomic keyword. Signed-off-by: Nathan Hjelm <hjelmn@lanl.gov>
68 строки
1.5 KiB
C
68 строки
1.5 KiB
C
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
|
/*
|
|
* Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
|
* Copyright (c) 2014 The University of Tennessee and The University
|
|
* of Tennessee Research Foundation. All rights
|
|
* reserved.
|
|
* Copyright (c) 2018 Los Alamos National Security, LLC. All rights
|
|
* reserved.
|
|
* $COPYRIGHT$
|
|
*/
|
|
|
|
#include "opal_config.h"
|
|
|
|
#include <stdio.h>
|
|
|
|
#include "support.h"
|
|
#include "opal/constants.h"
|
|
#include "opal/threads/threads.h"
|
|
#include "opal/sys/atomic.h"
|
|
|
|
|
|
/* Only have the body of this test if we have thread support */
|
|
|
|
static opal_atomic_int_t count = 0;
|
|
|
|
|
|
static void* thr1_run(opal_object_t* obj)
|
|
{
|
|
opal_atomic_add (&count, 1);
|
|
return NULL;
|
|
}
|
|
|
|
static void* thr2_run(opal_object_t* obj)
|
|
{
|
|
opal_atomic_add (&count, 2);
|
|
return NULL;
|
|
}
|
|
|
|
int main(int argc, char** argv)
|
|
{
|
|
int rc;
|
|
opal_thread_t thr1;
|
|
opal_thread_t thr2;
|
|
|
|
test_init("opal_thread_t");
|
|
|
|
OBJ_CONSTRUCT(&thr1, opal_thread_t);
|
|
OBJ_CONSTRUCT(&thr2, opal_thread_t);
|
|
|
|
thr1.t_run = thr1_run;
|
|
thr2.t_run = thr2_run;
|
|
|
|
rc = opal_thread_start(&thr1);
|
|
test_verify_int(OPAL_SUCCESS, rc);
|
|
|
|
rc = opal_thread_start(&thr2);
|
|
test_verify_int(OPAL_SUCCESS, rc);
|
|
|
|
rc = opal_thread_join(&thr1, NULL);
|
|
test_verify_int(OPAL_SUCCESS, rc);
|
|
|
|
rc = opal_thread_join(&thr2, NULL);
|
|
test_verify_int(OPAL_SUCCESS, rc);
|
|
|
|
test_verify_int(3, count);
|
|
return test_finalize();
|
|
}
|