Skip to content

Instantly share code, notes, and snippets.

@ahmedengu
Last active April 13, 2016 09:57
Show Gist options
  • Save ahmedengu/d02f1ce1b26c4f911d20fcb9c64133f6 to your computer and use it in GitHub Desktop.
Save ahmedengu/d02f1ce1b26c4f911d20fcb9c64133f6 to your computer and use it in GitHub Desktop.
generate random char and convert it to uppercase
#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
#include <math.h>
#include <ctype.h>
int number = 10, buff = 0;
char queue[10];
sem_t full_sem, empty_sem;
void insert(char e) {
if (buff + 1 < number) {
printf(", inserted char: %c", e);
queue[buff++] = e;
} else
printf("\nfull");
}
void Delete(char *e) {
if (buff > 0) {
*e = toupper(queue[--buff]);
} else
printf("\nempty");
}
void *produce() {
for (int i = 0; i < number; ++i) {
sem_wait(&full_sem);
printf("\ninsert random char #%d", i);
insert((char) 'a' + (random() % 26));
sem_post(&empty_sem);
}
}
void *consume(void *a) {
for (int i = 0; i < number; ++i) {
char v;
sem_wait(&empty_sem);
Delete(&v);
printf("\nuppercase char: %c", v);
sem_post(&full_sem);
}
}
int main() {
pthread_t t[2];
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, &consume, NULL);
pthread_join(t[0], NULL);
pthread_join(t[1], NULL);
sem_destroy(&full_sem);
sem_destroy(&empty_sem);
return 0;
}
insert random char #0, inserted char: n
insert random char #1, inserted char: w
insert random char #2, inserted char: l
insert random char #3, inserted char: r
insert random char #4, inserted char: b
insert random char #5, inserted char: b
insert random char #6, inserted char: m
insert random char #7, inserted char: q
insert random char #8, inserted char: b
uppercase char: B
uppercase char: Q
uppercase char: M
uppercase char: B
uppercase char: B
uppercase char: R
uppercase char: L
uppercase char: W
uppercase char: N
insert random char #9, inserted char: h
uppercase char: H
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment