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