brintos

brintos / llvm-project-archived public Read only

0
0
Text · 988 B · 58a43c2 Raw
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  pthread_mutex_lock(&mtx);9  Global++;10  pthread_mutex_unlock(&mtx);11  barrier_wait(&barrier);12  return NULL;13}14 15void *Thread2(void *x) {16  barrier_wait(&barrier);17  Global--;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 T2:25  // CHECK:   Previous write of size 4 at {{.*}} by thread T126  // CHECK:                     (mutexes: write [[M1:M[0-9]+]]):27  // CHECK:   Mutex [[M1]] (0x{{.*}}) created at:28  // CHECK:     #0 pthread_mutex_init29  // CHECK:     #1 main {{.*}}mutexset2.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