12d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %clangxx_tsan %s -o %t
22d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %run %t 2>&1 | FileCheck %s
32d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
42d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include "bench.h"
52d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
62d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinespthread_mutex_t *mtx;
72d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesconst int kStride = 16;
82d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
92d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesvoid thread(int tid) {
102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  for (int i = 0; i < bench_niter; i++) {
112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    pthread_mutex_lock(&mtx[tid * kStride]);
122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    pthread_mutex_unlock(&mtx[tid * kStride]);
132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  }
142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines}
152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesvoid bench() {
172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  mtx = (pthread_mutex_t*)malloc(bench_nthread * kStride * sizeof(*mtx));
182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  for (int i = 0; i < bench_nthread; i++) {
192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    pthread_mutex_init(&mtx[i * kStride], 0);
202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    pthread_mutex_lock(&mtx[i * kStride]);
212d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    pthread_mutex_unlock(&mtx[i * kStride]);
222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  }
232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  start_thread_group(bench_nthread, thread);
242d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines}
252d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
262d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK: DONE
272d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
28