#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
#include <math.h>
#include <ctype.h>
#define NUM 15
int number = NUM, buff = 0;
char queue[NUM][NUM];
sem_t full_sem, empty_sem;
void insert(char e[]) {
if (buff + 1 < number) {
buff++;
printf(", inserted text: %s", e
); int i = 0;
for (i = 0; i < number; ++i) {
queue[buff][i] = e[i];
}
} else {
}
}
void *produce2() {
int i = 0;
sem_wait(&full_sem);
printf("\nP2:: insert random text #%d", i
); char tmpChar[number];
int j = 0;
for (j = 0; j < number; ++j) {
tmpChar[j] = (char) 'a' + (random() % 26);
}
insert(tmpChar);
sem_post(&empty_sem);
}
void *produce() {
int i = 0;
sem_wait(&full_sem);
printf("\nP1:: insert random text #%d", i
); char tmpChar[number];
int j = 0;
for (j = 0; j < number; ++j) {
tmpChar[j] = (char) 'a' + (random() % 26);
}
insert(tmpChar);
sem_post(&empty_sem);
}
void *consume(void *a) {
int i = 0;
char v[number];
sem_wait(&empty_sem);
if (buff > 0) {
int j = 0;
for (j = 0; j < number; ++j) {
}
buff--;
} else {
}
printf("\nuppercase char: %s", v
); sem_post(&full_sem);
}
int main() {
pthread_t t[3];
sem_init(&full_sem, 0, number - 1);
sem_init(&empty_sem, 0, 0);
pthread_create(&t[0], NULL, &produce, NULL);
pthread_create(&t[1], NULL, &produce2, NULL);
pthread_create(&t[2], NULL, &consume, NULL);
pthread_create(&t[2], NULL, &consume, NULL);
pthread_join(t[0], NULL);
pthread_join(t[1], NULL);
pthread_join(t[2], NULL);
sem_destroy(&full_sem);
sem_destroy(&empty_sem);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxwdGhyZWFkLmg+CiNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KI2luY2x1ZGUgPG1hdGguaD4KI2luY2x1ZGUgPGN0eXBlLmg+CgojZGVmaW5lIE5VTSAgIDE1CmludCBudW1iZXIgPSBOVU0sIGJ1ZmYgPSAwOwpjaGFyIHF1ZXVlW05VTV1bTlVNXTsKc2VtX3QgZnVsbF9zZW0sIGVtcHR5X3NlbTsKCgp2b2lkIGluc2VydChjaGFyIGVbXSkgewogICAgaWYgKGJ1ZmYgKyAxIDwgbnVtYmVyKSB7CiAgICAgICAgYnVmZisrOwogICAgICAgIHByaW50ZigiLCBpbnNlcnRlZCB0ZXh0OiAlcyIsIGUpOwogICAgICAgIGludCBpID0gMDsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtYmVyOyArK2kpIHsKICAgICAgICAgICAgcXVldWVbYnVmZl1baV0gPSBlW2ldOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgcHJpbnRmKCJcbmZ1bGwiKTsKICAgIH0KfQoKCnZvaWQgKnByb2R1Y2UyKCkgewogICAgaW50IGkgPSAwOwogICAgICAgIHNlbV93YWl0KCZmdWxsX3NlbSk7CiAgICAgICAgcHJpbnRmKCJcblAyOjogIGluc2VydCByYW5kb20gdGV4dCAjJWQiLCBpKTsKICAgICAgICBjaGFyIHRtcENoYXJbbnVtYmVyXTsKICAgICAgICBpbnQgaiA9IDA7CiAgICAgICAgZm9yIChqID0gMDsgaiA8IG51bWJlcjsgKytqKSB7CiAgICAgICAgICAgIHRtcENoYXJbal0gPSAoY2hhcikgJ2EnICsgKHJhbmRvbSgpICUgMjYpOwogICAgICAgIH0KICAgICAgICBpbnNlcnQodG1wQ2hhcik7CiAgICAgICAgc2VtX3Bvc3QoJmVtcHR5X3NlbSk7CiAgICAKCgp9Cgp2b2lkICpwcm9kdWNlKCkgewogICAgaW50IGkgPSAwOwogICAgICAgIHNlbV93YWl0KCZmdWxsX3NlbSk7CiAgICAgICAgcHJpbnRmKCJcblAxOjogaW5zZXJ0IHJhbmRvbSB0ZXh0ICMlZCIsIGkpOwogICAgICAgIGNoYXIgdG1wQ2hhcltudW1iZXJdOwogICAgICAgIGludCBqID0gMDsKICAgICAgICBmb3IgKGogPSAwOyBqIDwgbnVtYmVyOyArK2opIHsKICAgICAgICAgICAgdG1wQ2hhcltqXSA9IChjaGFyKSAnYScgKyAocmFuZG9tKCkgJSAyNik7CiAgICAgICAgfQogICAgICAgIGluc2VydCh0bXBDaGFyKTsKICAgICAgICBzZW1fcG9zdCgmZW1wdHlfc2VtKTsKICAgIAoKCn0KCnZvaWQgKmNvbnN1bWUodm9pZCAqYSkgewoKICAgIGludCBpID0gMDsKICAgICAgICBjaGFyIHZbbnVtYmVyXTsKICAgICAgICBzZW1fd2FpdCgmZW1wdHlfc2VtKTsKCiAgICAgICAgaWYgKGJ1ZmYgPiAwKSB7CiAgICAgICAgICAgIGludCBqID0gMDsKICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG51bWJlcjsgKytqKSB7CiAgICAgICAgICAgICAgICB2W2pdID0gdG91cHBlcihxdWV1ZVtidWZmXVtqXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnVmZi0tOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHByaW50ZigiXG5lbXB0eSIpOwogICAgICAgIH0KCiAgICAgICAgcHJpbnRmKCJcbnVwcGVyY2FzZSBjaGFyOiAlcyIsIHYpOwogICAgICAgIHNlbV9wb3N0KCZmdWxsX3NlbSk7CiAgICAKCgp9CgppbnQgbWFpbigpIHsKICAgIHB0aHJlYWRfdCB0WzNdOwogICAgc2VtX2luaXQoJmZ1bGxfc2VtLCAwLCBudW1iZXIgLSAxKTsKICAgIHNlbV9pbml0KCZlbXB0eV9zZW0sIDAsIDApOwoKICAgIHB0aHJlYWRfY3JlYXRlKCZ0WzBdLCBOVUxMLCAmcHJvZHVjZSwgTlVMTCk7CiAgICBwdGhyZWFkX2NyZWF0ZSgmdFsxXSwgTlVMTCwgJnByb2R1Y2UyLCBOVUxMKTsKCiAgICBwdGhyZWFkX2NyZWF0ZSgmdFsyXSwgTlVMTCwgJmNvbnN1bWUsIE5VTEwpOwogICAgcHRocmVhZF9jcmVhdGUoJnRbMl0sIE5VTEwsICZjb25zdW1lLCBOVUxMKTsKCiAgICBwdGhyZWFkX2pvaW4odFswXSwgTlVMTCk7CiAgICBwdGhyZWFkX2pvaW4odFsxXSwgTlVMTCk7CiAgICBwdGhyZWFkX2pvaW4odFsyXSwgTlVMTCk7CgogICAgc2VtX2Rlc3Ryb3koJmZ1bGxfc2VtKTsKICAgIHNlbV9kZXN0cm95KCZlbXB0eV9zZW0pOwogICAgcmV0dXJuIDA7Cn0=