38 lines · cpp
1// RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s2#include "test.h"3 4int Global;5pthread_mutex_t mtx;6 7void *Thread1(void *x) {8 barrier_wait(&barrier);9 pthread_mutex_lock(&mtx);10 Global++;11 pthread_mutex_unlock(&mtx);12 return NULL;13}14 15void *Thread2(void *x) {16 Global--;17 barrier_wait(&barrier);18 return NULL;19}20 21int main() {22 barrier_init(&barrier, 2);23 // CHECK: WARNING: ThreadSanitizer: data race24 // CHECK: Write of size 4 at {{.*}} by thread T125 // CHECK: (mutexes: write [[M1:M[0-9]+]]):26 // CHECK: Previous write of size 4 at {{.*}} by thread T2:27 // CHECK: Mutex [[M1]] (0x{{.*}}) created at:28 // CHECK: #0 pthread_mutex_init29 // CHECK: #1 main {{.*}}mutexset1.cpp:[[@LINE+1]]30 pthread_mutex_init(&mtx, 0);31 pthread_t t[2];32 pthread_create(&t[0], NULL, Thread1, NULL);33 pthread_create(&t[1], NULL, Thread2, NULL);34 pthread_join(t[0], NULL);35 pthread_join(t[1], NULL);36 pthread_mutex_destroy(&mtx);37}38