12d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %clangxx_tsan %s -o %t 22d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %run %t 2>&1 | FileCheck %s 32d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 4799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// bench.h needs pthread barriers which are not available on OS X 5799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// UNSUPPORTED: darwin 6799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar 72d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include "bench.h" 82d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 92d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinespthread_mutex_t mtx; 102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinespthread_cond_t cv; 112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesint x; 122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesvoid thread(int tid) { 142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines for (int i = 0; i < bench_niter; i++) { 152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines pthread_mutex_lock(&mtx); 162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines while (x != i * 2 + tid) 172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines pthread_cond_wait(&cv, &mtx); 182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines x++; 192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines pthread_cond_signal(&cv); 202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines pthread_mutex_unlock(&mtx); 212d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines } 222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines} 232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 242d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesvoid bench() { 252d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines pthread_mutex_init(&mtx, 0); 262d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines pthread_cond_init(&cv, 0); 272d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines start_thread_group(2, thread); 282d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines} 292d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 302d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK: DONE 312d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 32