brintos

brintos / llvm-project-archived public Read only

0
0
Text · 997 B · 7702ee6 Raw
47 lines · c
1// RUN: %clang_tsan %s -o %t2// RUN: %run %t 2>&1 | FileCheck %s --implicit-check-not='ThreadSanitizer'3 4#include "dispatch/dispatch.h"5 6#include "../test.h"7 8long global;9 10int main() {11  fprintf(stderr, "Hello world.\n");12  dispatch_semaphore_t done = dispatch_semaphore_create(0);13  barrier_init(&barrier, 2);14 15  dispatch_queue_t q = dispatch_queue_create("my.queue", DISPATCH_QUEUE_CONCURRENT);16  dispatch_queue_t bgq = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);17 18  dispatch_async(bgq, ^{19    dispatch_sync(q, ^{20      global = 42;21    });22    barrier_wait(&barrier);23  });24 25  dispatch_async(bgq, ^{26    barrier_wait(&barrier);27    dispatch_barrier_sync(q, ^{28      global = 43;29    });30 31    dispatch_async(bgq, ^{32      barrier_wait(&barrier);33      global = 44;34    });35 36    barrier_wait(&barrier);37 38    dispatch_semaphore_signal(done);39  });40 41  dispatch_semaphore_wait(done, DISPATCH_TIME_FOREVER);42  fprintf(stderr, "Done.\n");43}44 45// CHECK: Hello world.46// CHECK: Done.47