#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
sem_t empty, full;
int buffer = 0;
void *producer(void *arg) {
int item = 1;
sem_wait(&empty);
buffer = item;
sem_post(&full);
return NULL;
}
void *consumer(void *arg) {
sem_wait(&full);
buffer = 0;
sem_post(&empty);
return NULL;
}
int main() {
sem_init(&empty, 0, 1);
sem_init(&full, 0, 0);
pthread_t p, c;
pthread_create(&p, NULL, producer, NULL);
pthread_create(&c, NULL, consumer, NULL);
pthread_join(p, NULL);
pthread_join(c, NULL);
sem_destroy(&empty);
sem_destroy(&full);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxwdGhyZWFkLmg+CiNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KCnNlbV90IGVtcHR5LCBmdWxsOwppbnQgYnVmZmVyID0gMDsKCnZvaWQgKnByb2R1Y2VyKHZvaWQgKmFyZykgewogICAgaW50IGl0ZW0gPSAxOwogICAgc2VtX3dhaXQoJmVtcHR5KTsKICAgIGJ1ZmZlciA9IGl0ZW07CiAgICBwcmludGYoIueUn+S6p+iAheeUn+S6p++8miVkXG4iLCBidWZmZXIpOwogICAgc2VtX3Bvc3QoJmZ1bGwpOwogICAgcmV0dXJuIE5VTEw7Cn0KCnZvaWQgKmNvbnN1bWVyKHZvaWQgKmFyZykgewogICAgc2VtX3dhaXQoJmZ1bGwpOwogICAgcHJpbnRmKCLmtojotLnogIXmtojotLnvvJolZFxuIiwgYnVmZmVyKTsKICAgIGJ1ZmZlciA9IDA7CiAgICBzZW1fcG9zdCgmZW1wdHkpOwogICAgcmV0dXJuIE5VTEw7Cn0KCmludCBtYWluKCkgewogICAgc2VtX2luaXQoJmVtcHR5LCAwLCAxKTsKICAgIHNlbV9pbml0KCZmdWxsLCAwLCAwKTsKICAgIHB0aHJlYWRfdCBwLCBjOwogICAgcHRocmVhZF9jcmVhdGUoJnAsIE5VTEwsIHByb2R1Y2VyLCBOVUxMKTsKICAgIHB0aHJlYWRfY3JlYXRlKCZjLCBOVUxMLCBjb25zdW1lciwgTlVMTCk7CiAgICBwdGhyZWFkX2pvaW4ocCwgTlVMTCk7CiAgICBwdGhyZWFkX2pvaW4oYywgTlVMTCk7CiAgICBzZW1fZGVzdHJveSgmZW1wdHkpOwogICAgc2VtX2Rlc3Ryb3koJmZ1bGwpOwogICAgcmV0dXJuIDA7Cn0=