#include<stdio.h>
#include<unistd.h>
#include<pthread.h>
pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;
int done=0;
pthread_cond_t cond=PTHREAD_COND_INITIALIZER;
void thr_exit(){
pthread_mutex_lock(&mutex);
done=1;
pthread_cond_signal(&cond);
usleep(20000);
pthread_mutex_unlock(&mutex);
}
void *child(void *args){
thr_exit();
return NULL;
}
void thr_join(){
pthread_mutex_lock(&mutex);
while(done==0){
pthread_cond_wait(&cond,&mutex);
}
pthread_mutex_unlock(&mutex);
}
int main(){
pthread_t p;
pthread_create(&p,NULL,child,NULL);
thr_join();
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8dW5pc3RkLmg+CiNpbmNsdWRlPHB0aHJlYWQuaD4KCnB0aHJlYWRfbXV0ZXhfdCBtdXRleD1QVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOwppbnQgZG9uZT0wOwpwdGhyZWFkX2NvbmRfdCBjb25kPVBUSFJFQURfQ09ORF9JTklUSUFMSVpFUjsKCnZvaWQgdGhyX2V4aXQoKXsKICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmbXV0ZXgpOwogICAgZG9uZT0xOwogICAgcHRocmVhZF9jb25kX3NpZ25hbCgmY29uZCk7CiAgICB1c2xlZXAoMjAwMDApOwogICAgcHRocmVhZF9tdXRleF91bmxvY2soJm11dGV4KTsKICAgIHByaW50ZigiVGhyZWFkIGV4aXRcbiIpOwp9Cgp2b2lkICpjaGlsZCh2b2lkICphcmdzKXsKcHJpbnRmKCJDaGlsZFxuIik7CnRocl9leGl0KCk7CnJldHVybiBOVUxMOwp9CnZvaWQgdGhyX2pvaW4oKXsKICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmbXV0ZXgpOwogICAgd2hpbGUoZG9uZT09MCl7CiAgICAgICAgcHRocmVhZF9jb25kX3dhaXQoJmNvbmQsJm11dGV4KTsKICAgIH0KICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtdXRleCk7Cn0KaW50IG1haW4oKXsKICAgIHB0aHJlYWRfdCBwOwogICAgcHJpbnRmKCJQYXJlbnQgIGJlZ2luXG4iKTsKICAgIHB0aHJlYWRfY3JlYXRlKCZwLE5VTEwsY2hpbGQsTlVMTCk7CiAgICB0aHJfam9pbigpOwogICAgcHJpbnRmKCJQYXJlbnQgZW5kXG4iKTsKfQ==