/* * Copyright (c) 2016 Linux Test Project * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it would be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ /* * Test that tst_atomic_inc works as expected. */ #include <pthread.h> #include "tst_test.h" #define THREADS 64 #define ITERATIONS 100000 static int atomic; static void *worker(void *id) { int i; (void) id; for (i = 0; i < ITERATIONS; i++) tst_atomic_inc(&atomic); return NULL; } static void do_test(void) { long i; pthread_t threads[THREADS]; for (i = 0; i < THREADS; i++) pthread_create(threads+i, NULL, worker, (void *)i); for (i = 0; i < THREADS; i++) { tst_res(TINFO, "Joining thread %li", i); pthread_join(threads[i], NULL); } if (atomic == THREADS * ITERATIONS) tst_res(TPASS, "Atomic working as expected"); else tst_res(TFAIL, "Atomic does not have expected value"); } static struct tst_test test = { .tid = "test09", .test_all = do_test, };