#include <pthread.h> | |
#include <string.h> | |
#include <stdlib.h> | |
#include <stdio.h> | |
#include <unistd.h> | |
void *volatile mem; | |
volatile int len; | |
void *Thread(void *p) { | |
while ((p = __atomic_load_n(&mem, __ATOMIC_ACQUIRE)) == 0) | |
usleep(100); | |
memset(p, 0, len); | |
return 0; | |
} | |
extern "C" void libfunc() { | |
pthread_t t; | |
pthread_create(&t, 0, Thread, 0); | |
len = 10; | |
__atomic_store_n(&mem, malloc(len), __ATOMIC_RELEASE); | |
pthread_join(t, 0); | |
free(mem); | |
fprintf(stderr, "OK\n"); | |
} |