#include <stdio.h>
#include <pthread.h>
pthread_mutex_t lock;
pthread_cond_t condition;
void* waiting_thread(void* arg) {
pthread_mutex_lock(&lock);
printf("Waiting for signal...\n"); pthread_cond_wait(&condition, &lock);
pthread_mutex_unlock(&lock);
return NULL;
}
void* signaling_thread(void* arg) {
pthread_mutex_lock(&lock);
printf("Sending signal...\n"); pthread_cond_signal(&condition);
pthread_mutex_unlock(&lock);
return NULL;
}
int main() {
pthread_t thread1, thread2;
pthread_mutex_init(&lock, NULL);
pthread_cond_init(&condition, NULL);
pthread_create(&thread1, NULL, waiting_thread, NULL);
sleep(1); // Ensuring the waiting thread executes first
pthread_create(&thread2, NULL, signaling_thread, NULL);
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
pthread_mutex_destroy(&lock);
pthread_cond_destroy(&condition);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxwdGhyZWFkLmg+CgpwdGhyZWFkX211dGV4X3QgbG9jazsKcHRocmVhZF9jb25kX3QgY29uZGl0aW9uOwoKdm9pZCogd2FpdGluZ190aHJlYWQodm9pZCogYXJnKSB7CiAgICBwdGhyZWFkX211dGV4X2xvY2soJmxvY2spOwogICAgcHJpbnRmKCJXYWl0aW5nIGZvciBzaWduYWwuLi5cbiIpOwogICAgcHRocmVhZF9jb25kX3dhaXQoJmNvbmRpdGlvbiwgJmxvY2spOwogICAgcHJpbnRmKCJSZWNlaXZlZCBzaWduYWwhXG4iKTsKICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZsb2NrKTsKICAgIHJldHVybiBOVUxMOwp9Cgp2b2lkKiBzaWduYWxpbmdfdGhyZWFkKHZvaWQqIGFyZykgewogICAgcHRocmVhZF9tdXRleF9sb2NrKCZsb2NrKTsKICAgIHByaW50ZigiU2VuZGluZyBzaWduYWwuLi5cbiIpOwogICAgcHRocmVhZF9jb25kX3NpZ25hbCgmY29uZGl0aW9uKTsKICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZsb2NrKTsKICAgIHJldHVybiBOVUxMOwp9CgppbnQgbWFpbigpIHsKICAgIHB0aHJlYWRfdCB0aHJlYWQxLCB0aHJlYWQyOwogICAgcHRocmVhZF9tdXRleF9pbml0KCZsb2NrLCBOVUxMKTsKICAgIHB0aHJlYWRfY29uZF9pbml0KCZjb25kaXRpb24sIE5VTEwpOwoKICAgIHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWQxLCBOVUxMLCB3YWl0aW5nX3RocmVhZCwgTlVMTCk7CiAgICBzbGVlcCgxKTsgLy8gRW5zdXJpbmcgdGhlIHdhaXRpbmcgdGhyZWFkIGV4ZWN1dGVzIGZpcnN0CiAgICBwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkMiwgTlVMTCwgc2lnbmFsaW5nX3RocmVhZCwgTlVMTCk7CgogICAgcHRocmVhZF9qb2luKHRocmVhZDEsIE5VTEwpOwogICAgcHRocmVhZF9qb2luKHRocmVhZDIsIE5VTEwpOwoKICAgIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmbG9jayk7CiAgICBwdGhyZWFkX2NvbmRfZGVzdHJveSgmY29uZGl0aW9uKTsKICAgIHJldHVybiAwOwp9Cg==