// Online C compiler to run C program online
#include <stdio.h>
#include<pthread.h>
#include<stdlib.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
const int MAX = 99;
int count = 0;
void* even (void *ptr)
{
pthread_mutex_lock(&mutex);
while(count <= MAX)
{
if(count%2 != 0)
{
pthread_cond_wait(&cond, &mutex);
}
pthread_mutex_unlock(&mutex);
pthread_cond_signal(&cond);
}
pthread_exit(0);
}
void* odd (void *ptr)
{
pthread_mutex_lock(&mutex);
while(count <= MAX)
{
if(count%2 == 0)
{
pthread_cond_wait(&cond, &mutex);
}
pthread_mutex_unlock(&mutex);
pthread_cond_signal(&cond);
}
pthread_exit(0);
}
int main()
{
pthread_t t1,t2;
pthread_create(&t1, NULL, even, NULL);
pthread_create(&t2, NULL, odd, NULL);
pthread_join(t1, 0);
pthread_join(t2, 0);
}
Ly8gT25saW5lIEMgY29tcGlsZXIgdG8gcnVuIEMgcHJvZ3JhbSBvbmxpbmUKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlPHB0aHJlYWQuaD4KI2luY2x1ZGU8c3RkbGliLmg+CgpwdGhyZWFkX211dGV4X3QgbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOwpwdGhyZWFkX2NvbmRfdCBjb25kID0gUFRIUkVBRF9DT05EX0lOSVRJQUxJWkVSOwoKY29uc3QgaW50IE1BWCA9IDk5OwppbnQgY291bnQgPSAwOwoKdm9pZCogZXZlbiAodm9pZCAqcHRyKQp7CglwdGhyZWFkX211dGV4X2xvY2soJm11dGV4KTsKCXdoaWxlKGNvdW50IDw9IE1BWCkKCXsKCQlpZihjb3VudCUyICE9IDApCgkJewoJCQlwdGhyZWFkX2NvbmRfd2FpdCgmY29uZCwgJm11dGV4KTsKCQl9CglwcmludGYoIiVkXG4iLCBjb3VudCsrKTsKCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtdXRleCk7CglwdGhyZWFkX2NvbmRfc2lnbmFsKCZjb25kKTsKCX0KCXB0aHJlYWRfZXhpdCgwKTsKfQoKdm9pZCogb2RkICh2b2lkICpwdHIpCnsKCXB0aHJlYWRfbXV0ZXhfbG9jaygmbXV0ZXgpOwoJd2hpbGUoY291bnQgPD0gTUFYKQoJewoJCWlmKGNvdW50JTIgPT0gMCkKCQl7CgkJCXB0aHJlYWRfY29uZF93YWl0KCZjb25kLCAmbXV0ZXgpOwoJCX0KCXByaW50ZigiJWRcbiIsIGNvdW50KyspOwoJcHRocmVhZF9tdXRleF91bmxvY2soJm11dGV4KTsKCXB0aHJlYWRfY29uZF9zaWduYWwoJmNvbmQpOwoJfQoJcHRocmVhZF9leGl0KDApOwp9CmludCBtYWluKCkKewoJcHRocmVhZF90IHQxLHQyOwoJcHRocmVhZF9jcmVhdGUoJnQxLCBOVUxMLCBldmVuLCBOVUxMKTsKCXB0aHJlYWRfY3JlYXRlKCZ0MiwgTlVMTCwgb2RkLCBOVUxMKTsKCQoJcHRocmVhZF9qb2luKHQxLCAwKTsKCXB0aHJlYWRfam9pbih0MiwgMCk7Cn0K