35 #ifdef HAVE_PTHREAD_BARRIER_T 41 static pthread_barrier_t
bar[
NR];
42 static pthread_barrier_t let[
NR];
44 static void wait(pthread_barrier_t *b)
48 result = pthread_barrier_wait(b);
49 M0_ASSERT(result == 0 || result == PTHREAD_BARRIER_SERIAL_THREAD);
52 static void worker(
int id)
58 struct timespec
delay;
60 for (
i = 0;
i <
NR; ++
i) {
62 for (j = 0; j < 2; ++j) {
63 for (k = 0; k <
NR; ++k) {
64 if ((
id +
i + j) % 2 == 0)
71 delay.tv_nsec = (((
id +
i) % 4) + 1) * 1000;
85 static void cas_insert(
struct el *e)
92 static void cas_delete(
void)
101 static void breset(pthread_barrier_t *b,
int n)
105 result = pthread_barrier_destroy(b);
107 result = pthread_barrier_init(b,
NULL,
n);
111 static void cas(
int id)
124 for (
i = 0;
i <
NR; ++
i) {
129 for (
i = 0;
i <
NR; ++
i) {
130 for (j = 0; j <
NR; ++j)
132 for (j = 0; j <
NR; ++j)
142 #ifdef HAVE_PTHREAD_BARRIER_T 155 for (
i = 0;
i <
NR; ++
i) {
161 for (
i =
sum;
i > 0; --
i) {
167 result = pthread_barrier_init(&
bar[
i],
NULL,
NR + 1);
169 result = pthread_barrier_init(&let[
i],
NULL,
NR + 1);
180 for (
i = 0;
i <
NR; ++
i) {
201 breset(&
bar[1],
NR + 1);
204 breset(&
bar[2],
NR + 1);
207 breset(&
bar[3],
NR + 1);
210 breset(&
bar[4],
NR + 1);
217 for (j = 0; j <
NR; ++j) {
219 breset(&
bar[1],
NR + 1);
222 for (
i = 0, sum1 = 0, e =
list;
i <
NR; ++
i, e = e->next) {
230 breset(&
bar[2],
NR + 1);
232 for (j = 0; j <
NR; ++j) {
234 breset(&
bar[3],
NR + 1);
237 breset(&
bar[4],
NR + 1);
241 result = pthread_barrier_destroy(&
bar[
i]);
243 result = pthread_barrier_destroy(&let[
i]);
271 { .ub_name =
"atomic",
static struct m0_semaphore wait
static struct m0_list list
int m0_thread_join(struct m0_thread *q)
static void m0_atomic64_sub(struct m0_atomic64 *a, int64_t num)
static void atomic_ub(int i)
#define M0_THREAD_INIT(thread, TYPE, init, func, arg, namefmt,...)
static const struct m0_uint128 zero
struct m0_ub_set m0_atomic_ub
static struct m0_reqh_service * cas
static struct m0_thread t[8]
void m0_thread_fini(struct m0_thread *q)
static bool m0_atomic64_dec_and_test(struct m0_atomic64 *a)
static int64_t m0_atomic64_get(const struct m0_atomic64 *a)
#define M0_ATOMIC64_CAS(loc, oldval, newval)
static struct elevator el
static void m0_atomic64_add(struct m0_atomic64 *a, int64_t num)
static void m0_atomic64_set(struct m0_atomic64 *a, int64_t num)
#define M0_IMPOSSIBLE(fmt,...)