1 #include <pthread.h>
2 #include <string.h>
3 #include <stdlib.h>
4 #include <stdio.h>
5 #include <unistd.h>
6 
7 void *volatile mem;
8 volatile int len;
9 
Thread(void * p)10 void *Thread(void *p) {
11   while ((p = __atomic_load_n(&mem, __ATOMIC_ACQUIRE)) == 0)
12     usleep(100);
13   memset(p, 0, len);
14   return 0;
15 }
16 
libfunc()17 extern "C" void libfunc() {
18   pthread_t t;
19   pthread_create(&t, 0, Thread, 0);
20   len = 10;
21   __atomic_store_n(&mem, malloc(len), __ATOMIC_RELEASE);
22   pthread_join(t, 0);
23   free(mem);
24   fprintf(stderr, "OK\n");
25 }
26