1da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany#include <pthread.h> 2da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany#include <stdlib.h> 3da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany#include <stdio.h> 4da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany 5da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryanystruct Cache { 6da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany int x; 75092682c3a6902e460a6e439cf48b3dc7d48dc65Alexey Samsonov explicit Cache(int x) 8da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany : x(x) { 9da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany } 10da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany}; 11da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany 12da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryanyvoid foo(Cache *my) { 13da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany static Cache *c = my ? my : new Cache(rand()); 14da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany if (c->x >= RAND_MAX) 15da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany exit(1); 16da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany} 17da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany 18da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryanyvoid *Thread(void *x) { 19da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany foo(new Cache(rand())); 20da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany return 0; 21da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany} 22da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany 23da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryanyint main() { 24da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany pthread_t t[2]; 25da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany pthread_create(&t[0], 0, Thread, 0); 26da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany pthread_create(&t[1], 0, Thread, 0); 27da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany pthread_join(t[0], 0); 28da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany pthread_join(t[1], 0); 29da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany} 30da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany 31da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany// CHECK-NOT: WARNING: ThreadSanitizer: data race 32