40 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 {{.*}}mutexset8.cpp30 mtx = new pthread_mutex_t;31 pthread_mutex_init(mtx, 0);32 pthread_t t[2];33 pthread_create(&t[0], NULL, Thread1, NULL);34 pthread_create(&t[1], NULL, Thread2, NULL);35 pthread_join(t[0], NULL);36 pthread_join(t[1], NULL);37 pthread_mutex_destroy(mtx);38 delete mtx;39}40