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