Path: blob/main/contrib/llvm-project/compiler-rt/lib/tsan/benchmarks/mini_bench_shared.cpp
35269 views
// Mini-benchmark for tsan: shared memory reads.1#include <pthread.h>2#include <stdio.h>3#include <stdlib.h>4#include <assert.h>56int len;7int *a;8const int kNumIter = 1000;910__attribute__((noinline))11void Run(int idx) {12for (int i = 0, n = len; i < n; i++)13if (a[i] != i) abort();14}1516void *Thread(void *arg) {17long idx = (long)arg;18printf("Thread %ld started\n", idx);19for (int i = 0; i < kNumIter; i++)20Run(idx);21printf("Thread %ld done\n", idx);22return 0;23}2425int main(int argc, char **argv) {26int n_threads = 0;27if (argc != 3) {28n_threads = 4;29len = 1000000;30} else {31n_threads = atoi(argv[1]);32assert(n_threads > 0 && n_threads <= 32);33len = atoi(argv[2]);34}35printf("%s: n_threads=%d len=%d iter=%d\n",36__FILE__, n_threads, len, kNumIter);37a = new int[len];38for (int i = 0, n = len; i < n; i++)39a[i] = i;40pthread_t *t = new pthread_t[n_threads];41for (int i = 0; i < n_threads; i++) {42pthread_create(&t[i], 0, Thread, (void*)i);43}44for (int i = 0; i < n_threads; i++) {45pthread_join(t[i], 0);46}47delete [] t;48delete [] a;49return 0;50}515253